1. BeanUtils
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
BeanPo bp = new BeanPo();
bp.setName("aaaa");
try {
BeanPo bp2 = (BeanPo) BeanUtils.cloneBean(bp);
System.out.println(bp2.getName());
String name = BeanUtils.getSimpleProperty(bp, "name");
System.out.println("..." + name);
BeanUtils.setProperty(bp2, "name", "44444555");
name = BeanUtils.getSimpleProperty(bp2, "name");
System.out.println("..." + name);
// ConstructorUtils , MethodUtils, PropertyUtils,ConvertUtils
} catch (Exception e) {
e.printStackTrace();
}
2. java.lang.reflect原生写法
Class stuClass = Class.forName("fanshe.field.Student");
//2.获取字段
System.out.println("************获取所有公有的字段********************");
Field[] fieldArray = stuClass.getFields();
for(Field f : fieldArray){
System.out.println(f);
}
Field f = stuClass.getField("name");
System.out.println(f);
//获取一个对象
Object obj = stuClass.getConstructor().newInstance();//产生Student对象--》Student stu = new Student();
//为字段设置值
f.set(obj, "刘德华");//为Student对象中的name属性赋值--》stu.name = "刘德华"
f = stuClass.getDeclaredField("phoneNum");
System.out.println(f);
f.setAccessible(true);//暴力反射,解除私有限定
f.set(obj, "18888889999");
System.out.println("验证电话:" + stu);
Method[] methodArray = stuClass.getMethods();
for(Method m : methodArray){
System.out.println(m);
}
System.out.println("***************获取所有的方法,包括私有的*******************");
methodArray = stuClass.getDeclaredMethods();
for(Method m : methodArray){
System.out.println(m);
}
System.out.println("***************获取公有的show1()方法*******************");
Method m = stuClass.getMethod("show1", String.class);
System.out.println(m);
//实例化一个Student对象
Object obj = stuClass.getConstructor().newInstance();
m.invoke(obj, "刘德华");
3. Spring的反射工具类 ReflectionUtils
4. Guava 反射工具 Atitit