反射的概述
要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射的应用场景:
通过反射来给对象赋值,把Map或request里面的对象取出来赋给对象,就省下10来个set或get了
@Test
public void test1() throws Exception{
User p = new User();
Method methods[] = p.getClass().getMethods();
Map paramap=new HashMap<String, Object>();
paramap.put("Nickname", "123");
for(int i=0;i<methods.length;i++){
String methodname=methods[i].getName();
if(methodname.contains("set")){
if(paramap.containsKey(getFirstCharacterToUpper(methodname))){
methods[i].invoke(p,paramap.get(methodname.substring(3,methodname.length())));
}
}
}
System.out.println(p.getNickname());
}
private static String getFirstCharacterToUpper(String srcStr) {
String str1=srcStr.substring(3,srcStr.length());
return str1;
}
当然在写的时候可以直接用标签@Valid,也不用用这个,如果两个bean相互赋值的话也可以直接用
BeanUtils.copyProperties(publishCube, cube);
总体还是感觉反射没啥子卵用,但是以前用反射做跟踪调试时用到过,导出文件过程中,用getclass确定这个对象是execle还是xml过就当这个吧