反射
我们来探讨Java中的一些动态特性,包括反射、注解、动态代理、类加载器等。利用这些特性,可以优雅地实现一些灵活通用的功能,它们经常用于各种框架、库和系统程序中,比如:
1)14.5节介绍的Jackson,利用反射和注解实现了通用的序列化机制。
2)有多种库(如Spring MVC、Jersey)用于处理Web请求,利用反射和注解,能方便地将用户的请求参数和内容转换为Java对象,将Java对象转变为响应内容。
3)有多种库(如Spring、Guice)利用这些特性实现了对象管理容器,方便程序员管理对象的生命周期以及其中复杂的依赖关系。
4)应用服务器(如Tomcat)利用类加载器实现不同应用之间的隔离,JSP技术利用类加载器实现修改代码不用重启就能生效的特性。
5)面向方面的编程AOP(Aspect Oriented Programming)将编程中通用的关注点(如日志记录、安全检查等)与业务的主体逻辑相分离,减少冗余代码,提高程序的可维护性,AOP需要依赖上面的这些特性来实现。
本章主要介绍反射机制,后续章节介绍其他内容。
在一般操作数据的时候,我们都是知道并且依赖于数据类型的,比如:
1)根据类型使用new创建对象。
2)根据类型定义变量,类型可能是基本类型、类、接口或数组。
3)将特定类型的对象传递给方法。
4)根据类型访问对象的属性,调用对象的方法。
编译器也是根据类型进行代码的检查编译的。
反射不一样,它是在运行时,而非编译时,动态获取类型的信息,比如接口信息、成员信息、方法信息、构造方法信息等,根据这些动态获取到的信息创建对象、访问/修改成员、调用方法等。
https://www.bilibili.com/video/BV1DP4y1R7ub/?spm_id_from=333.999.0.0&vd_source=a7816e3b2a3a67ac39dc87f6bf92421chttps://www.bilibili.com/video/BV1DP4y1R7ub/?spm_id_from=333.999.0.0&vd_source=a7816e3b2a3a67ac39dc87f6bf92421c