1.反射基本概念
类创建对象的时候,都是在编译的时候完成。
反射不一样
它是在运行时,而非编译时
动态获取类型的信息,比如:
接口信息、成员信息、方法信息、构造方法信息....
根据这些动态获取到的信息创建对象、访问/修改成员、调用方法等。
2.反射的使用场景
序列化库Jackson,利用反射和注解实现了通用的序列化/反序列化机制
Spring MVC, Jersey用于处理Web请求,利用反射和注解,能方便的将用户的请求参数和内容转换为Java对象,将Java对象转变为响应内容
Spring, Guice利用这些特性实现了对象管理容器,方便程序员管理对象的生命周期以及其中复杂的依赖关系
应用服务器比如Tomcat利用类加载器实现不同应用之间的隔离、JSP技术也利用类加载器实现修改代码不用重启就能生效的特性
AOP将编程中通用的关注点比如日志记录、安全检查等与业务的主体逻辑相分离,减少冗余代码,提高程序的可维护性,AOP需要依赖上面的这些特性来实现
3. 运用
就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法。
Class类:
成员变量 Field
构造方法 Constructor
成员方法 Method
3.2 获取 Class 对象
A:Object类的getClass()方法
B:数据类型的静态属性class
C:Class类中的静态方法 forName(String className)