通过反射获得对象的三种方法:
1.通过对象.class
2.通过类名.getclass;
3.通过Class.for
创建构造Constructor
1.通过字节码对象调用 Constructor方法获取构造,可以是有参构造和无参构造 然后通过构造对象调用.newInstance方法返回一个对象;
2.直接用字节码对象调用newInstance获取对象
通过反射获取变量 Field;
首先要有 字节码对象 有了字节码对象就可以获取 类的对象;
有了类字节码对象就可以通过 getDeclaredField(这里传入一个变量名,这里会自动匹配在类中是否存在这个变量,如果不存在就会报错!)方法获取变量的对象;
有了变量对象就可以获取变量中的内容get(传入一个对象获取这个对象中的内容),set(传入一个对象获取这个对象中的内容,改变的参数);
通过反射获取方法mathod
这个和获取变量的很像;
也是通过字节码对象来获取的getMethod("传入一个方法名",如果有参数就写上 参数.Class)返回的是一个对象的字节码;
然后在对象的字节码后面点上一个invoke(传入一个类的对象,有参传参,没有就算了);
暴力反射setAccessible(true)
就是在你获取到的字节码变量或是字节码方法后面点上一个setAccessible(true),就可以让虚拟机无视你的权限修饰符都默认成public; 这样就可以随意访问了;
BeanUtils工具类的方法
static void setProperty(需要修改的对象, 变量名, 修改的参数)// 给JavaBean对象的成员变量进行赋值
static String getProperty(Object bean, String name) // 获取JavaBean对象的成员变量的值
将map对象中的内容传给对象,key是对象中的变量,value是变量的值;
static void populate(Object bean, Map properties)//// 给JavaBean对象的成员变量进行赋值
|