反射机制在于有字符串的类名,方法,字段名,组装成对应的对象协同操作,操作影响的效果作用在类的某个对象
具体作用在某个对象由invoke中传的对象参数决定
反射机由类开始获取获取字段,方法,最后落脚某个已有对象操作
TbOrderIron et= new TbOrderIron();
String ne=na.charAt(0)+ na.substring(1, na.length()).toLowerCase();
Class classType= et.getClass();
String setMethodName = "set" +ne;
Method setMethod;
try {
setMethod = classType.getMethod(setMethodName, new Class[]{BigDecimal.class});
//obj.stringValue(spax.getpSpsxKey())!=null?BigDecimal.valueOf(Long.valueOf(obj.stringValue(spax.getpSpsxKey()))):null}
String st= sp.stringValue(spax.getpSpsxKey());
BigDecimal bg=new BigDecimal(st);
setMethod.invoke(et, bg);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ioc di就是用反射实现
spring实现ioc di方式
看Spring 到底是怎么依赖注入的吧,其实依赖注入的思想也很简单,它是通过反射机制实现的,在实例化一个类时,
它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。让我们看看具体它是怎么做的吧。
首先实例化一个类,像这样
public static Object newInstance(String className) {
Class<?> cls = null;
Object obj = null;
try {
cls = Class.forName(className);
obj = cls.newInstance();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return obj;
}
public static void setProperty(Object obj, String name, String value) {
Class<? extends Object> clazz = obj.getClass();
try {
String methodName = returnSetMthodName(name);
Method[] ms = clazz.getMethods();
for (Method m : ms) {
if (m.getName().equals(methodName)) {
if (m.getParameterTypes().length == 1) {
Class<?> clazzParameterType = m.getParameterTypes()[0];
setFieldValue(clazzParameterType.getName(), value, m,
obj);
break;
}
}
}
} catch (SecurityException e) {
throw new RuntimeException(e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
}