package mina.remote;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
*
* @author xiaozhi
*
*/
public class Reflection {
/**
* 取得参数对象中的公共属性
*
* @param obj
* @param fieldname
* @return
* @throws Exception
*/
public static Object getProperty(Object obj, String fieldname) throws Exception {
Object result = null;
Class objClass = obj.getClass();
Field field = objClass.getField(fieldname);
result = field.get(obj);
return result;
}
/**
* 获得某类的静态属性
*
* @param className
* @param fieldName
* @return
* @throws Exception
*/
public static Object getStaticProperty(String className, String fieldName)
throws Exception {
Class cls = Class.forName(className);
Field field = cls.getField(fieldName);
Object provalue = field.get(cls);
return provalue;
}
/**
* 获取参数对象的属性值
*
* @param obj
* @param propertyName
* @return
* @throws Exception
*/
public static Object getPrivatePropertyValue(Object obj, String propertyName)
throws Exception {
Class cls = obj.getClass();
Field field = cls.getDeclaredField(propertyName);
field.setAccessible(true);
Object retvalue = field.get(obj);
return retvalue;
}
/**
* 执行某对象的方法
*
* @param owner
* @param methodName
* @param args
* @return
* @throws Exception
*/
public static Object invokeMethod(Object owner, String methodName, Object[] args)
throws Exception {
Class cls = owner.getClass();
Class[] argclass = new Class[args.length];
for (int i = 0, j = argclass.length; i < j; i++) {
argclass[i] = args[i].getClass();
}
Method method = cls.getMethod(methodName, argclass);
return method.invoke(owner, args);
}
/**
* 执行静态类的方法
*
* @param className
* @param methodName
* @param args
* @return
* @throws Exception
*/
public static Object invokeStaticMethod(String className, String methodName,Object[] args) throws Exception {
Class cls = Class.forName(className);
Class[] argclass = new Class[args.length];
for (int i = 0, j = argclass.length; i < j; i++) {
argclass[i] = args[i].getClass();
}
Method method = cls.getMethod(methodName, argclass);
return method.invoke(null, args);
}
public static Object newInstance(String className, Object[] args) throws Exception {
Class clss = Class.forName(className);
Class[] argclass = new Class[args.length];
for (int i = 0, j = argclass.length; i < j; i++) {
argclass[i] = args[i].getClass();
}
java.lang.reflect.Constructor cons = clss.getConstructor(argclass);
return cons.newInstance();
}
}