反射
反射机制的概述和字节码对象的获取方式
- 反射介绍
就是Java中一种获取任意类中方法和属性的机制;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制. - 字节码文件获取的三种方式
类名.class; // 类的属性
类对象.getClass(); // object的一个方法
Class.forName("类的全路径"); // 常用
- 字节码对象的组成
1.成员变量
2.成员方法
3.构造方法
反射操作构造方法
- 通过获取的构造创建对象
1.获取字节码对象
2.通过字节码对象获取构造方法
3.通过获取到的构造方法创建对象
- newInstance()和getConstructor()有什么区别?
通过newInstance()创建的对象,只能是通过无参构造创建的;
通过getConstructor()创建的对象,可以根据方法中的参数决定采用哪个构造方法创建对象
反射操作公共成员变量
- 反射获取public成员变量(字段)
1.获取字节码对象
2.通过字节码对象直接获取类中属性
- 反射修改public成员变量
1.通过反射获取字节码对象
2.创建对象
3.通过字节码对象获取指定的public成员变量 getField("属性名称");
4.通过获取到的成员变量的方法修改成员变量的值
反射操作私有成员变量
- 获取反射private成员变量(字段)
1.通过反射获取字节码对象
2.通过字节码对象获取私有成员变量
- 修改private成员变量
1.通过反射获取字节码对象
2.创建对象
3.通过字节码对象获取指定的public成员变量 getDeclaredField("属性名称");
4.通过获取到的成员变量的方法修改成员变量的值
通过反射获取成员方法并使用
- 反射获取普通成员方法
1.通过反射获取字节码对象
2.创建实例化对象
3.通过字节码对象获取到方法
4.执行方法,并传入实例对象
- 反射获取private成员方法
1.通过反射获取字节码对象
2.创建实例化对象
3.通过字节码对象获取到方法
4.解除jvm对其权限的检查 // 方法对象.setAccessible(true);
5.执行方法,并传入实例对象
BeanUtils
JavaBean的概述和规范
- 概述
就是一个类,用于封装数据提供规范。 - 规范
类使用public进行修饰
提供私有修饰的成员变量
为成员变量提供公共getter和setter方法
提供公共无参的构造
BeanUtils的使用
- 准备工作
1.导入两个jar包
commons-beanutils-1.8.3.jar
commons-logging-1.1.1.jar
2.将jar包Build path 配置到当前的classpath环境变量中
BeanUtils的常用方法
static void setProperty(Object bean, String name, Object value)
static String getProperty(Object bean, String name)
static void populate(Object bean, Map properties)
setProperty 用来给对象中的属性赋值
参数1: 需要设置属性的对象
参数2: 需要修改的属性名称
参数3: 需要修改的具体元素
getProperty 用来获取对象中的属性
参数1: 要获取的javaBean对象
参数2: 对象中的哪个属性
Populate 用来给对象中的属性赋值
参数1: 要设置属性的对象
参数2: 将属性以Map集合的形式传入
Key : 属性的名称
Value: 属性具体的值