反射

反射机制的概述和字节码对象的获取方式
  • 反射介绍
    就是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:  属性具体的值