import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/***
* @java反射通用类
*/
public class Reflection {
/**
* 得到某个对象的公共属性public
* @param owner, fieldName
* @return 该属性对象
* @throws Exception
*/
public Object getProperty(Object owner, String fieldName) throws Exception {
Class<?> ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
Object property = field.get(owner);
return property;
}
/***
*
* @param owner
* @param fieldName
* @param value
* @throws Exception
*/
public void setProperty(Object owner,String fieldName,Object value){
try {
Class<?> ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
field.set(owner, value);
} catch (Exception e) {
}
}
/**
* 得到某类的静态公共属性
* @param className 类名
* @param fieldName 属性名
* @return 该属性对象
* @throws Exception
*/
public Object getStaticProperty(String className, String fieldName)
throws Exception {
Class<?> ownerClass = Class.forName(className);
Field field = ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
return property;
}
/**
* 执行某对象方法 参数
* @param owner 对象
* @param methodName 方法名
* @param args 参数 参数不能为空
* @return 方法返回值
* @throws Exception
*/
public Object invokeMethod(Object owner, String methodName, Object args){
Class<?> ownerClass = owner.getClass();
Method method = null;
Object o = null;
try {
method = ownerClass.getMethod(methodName, args.getClass());
} catch (Exception e1) {
e1.printStackTrace();
}
try {
o = method.invoke(owner,args);
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
/**
* 执行某对象方法 执行方法时候,有参数就传数组 没有时候就传null
* @param owner 对象
* @param methodName 方法名
* @param args 参数
* @return 方法返回值
* @throws Exception
*/
public Object invokeMethods(Object owner, String methodName, Object[] args)
throws Exception {
Class<?> ownerClass = owner.getClass();
Class<?>[] argsClass = null;
int len = args.length;
if(args!=null){
argsClass = new Class[len];
for(int i = 0, j = len; i < j; i++) {
argsClass[i] = args[i].getClass();
}
}
Method method = null;
try {
method = ownerClass.getMethod(methodName, argsClass);
} catch (RuntimeException e1) {
e1.printStackTrace();
}
Object o = null;
try {
o = method.invoke(owner, args);
} catch (Exception e) {
}
return o;
}
/**
* 执行某类的静态方法
* @param className 类名
* @param methodName 方法名
* @param args 参数数组
* @return 执行方法返回的结果
* @throws Exception
*/
public Object invokeStaticMethod(String className, String methodName,
Object[] args) throws Exception {
Class<?> ownerClass = Class.forName(className);
Class<?>[] argsClass = null;
int len = args.length;
if(args!=null){
argsClass = new Class[len];
for (int i = 0, j = len; i < j; i++) {
argsClass[i] = args[i].getClass();
}
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(null, args);
}
/**
* 新建实例
* @param className 类名
* @param args 多个构造函数的参数
* @return 新建的实例
* @throws Exception
*/
public Object newInstance(String className, Object[] args) throws Exception {
Class<?> newoneClass = Class.forName(className);
Class<?>[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Constructor<?> cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
/**
* 新建实例
* @param className 类名
* @param args 一个构造函数的参数
* @return 新建的实例
* @throws Exception
*/
public Object newInstance(String className) {
Object obj = null;
try {
Class<?> newoneClass = Class.forName(className);
Constructor<?> cons = newoneClass.getConstructor();
obj = cons.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/***
* 新建一个数组对象
* @param cla 要生成数组的Class对象
* @param length 数组的大小
* @return
*/
public Object[] newArray(Class<?> cla ,int length){
return (Object[])Array.newInstance(cla, length);
}
/**
* 是不是某个类的实例
* @param obj 实例
* @param cls 类
* @return 如果 obj 是此类的实例,则返回 true
*/
public boolean isInstance(Object obj, Class<?> cls) {
return cls.isInstance(obj);
}
/**
* 得到数组中的某个元素
* @param array 数组
* @param index 索引
* @return 返回指定数组对象中索引组件的值
*/
public Object getByArray(Object array, int index) {
return Array.get(array,index);
}
}
相关推荐
java的基于泛型+反射的通用DAO例子,原创,没事写着玩的,请多指教哈。。。
采用反射技术和XML,自动生成实体类和SQL语句..............
应用抽象工厂+反射实现通用数据源设计
通过反射机制写的通用的方法,查询出对应的对象信息出来,通过一个SQL语句 返回一个对象或列表,在使用方法时要确保表名和实体名称一致,如果不一致,根据自己的业务规则需要改成一致,
易语言类的反射调用源码,类的反射调用,取指针,取当前方法索引,注册方法,set,get,msgbox,test,调用子程序_数组,CopyMemory,取指针_通用型,取指针_通用型_数组,指针到字节,指针到整数,指针到短整数,调用反射函数
基于标注和反射机制的通用JavaBean持久化工具类.pdf
利用java反射创建通用的数据库查询方法.docx
(类的加载概述和加载时机) (类加载器的概述和分类) (获取class文件对象的三种方式) ...(通过反射写一个通用的设置某个对象的某个属性为指定的值) (通过用户的增删改查和学生的登录注册引出中介) (动态代理的概述和实现)
应用抽象工厂+反射实现通用数据源设计。来源于北大青鸟内部设计模式讲座。
poi通过反射,泛型,注解来实现通用的poi导出导入公共类。
完整的版本.Net2.0通用反射脱壳机能脱压缩壳,整体加密壳,有反射漏洞的加密壳。 方法: 采用的是注入方式,注入到目标进程。 注入后会看到一个列表界面。 在这个列表里面会显示出当前进程中的所有程序集。 首先在...
文件解压后当成文件夹导入到src里面就行了 database.properties文件用来设置数据库连接的参数 主要的操作类是BaseDAO 包含了基本数据库操作(增,删,改,查)方法有注释。不过没有给例子。这问题纠结了几天,还是...
通过javabeen类从数据库中查询反射出对应的been类数据集合,写一个查询方法就可以通用
抽象工厂模式反射配置文件实现通用数据源,抽象工厂模式反射配置文件实现通用数据源
通过.net反射功能实现的通用Bll、通用Dal,极大的减少了重复代码,减少编码工作量
利用java反射创建通用的数据库查询方法.pdf
java反射实现数据库增、删、改、查操作Dao
1.通用数据库访问组件1 2.通用数据库访问组件2 3.角色权限管理思想及应用 4.角色权限管理思想原理及示例数据 6.BS权限管理实例(二) 7.DEV控件及实现功能介绍(一) 8.DEV控件及实现功能介绍(二) 9.DEV控件及实现功能...