反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。
例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。
Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。
例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。
1、Java的反射特性是一项非常强大和有用的功能,它使得我们可以轻松的在运行时观察到类实例的内部状态,并且可以动态的操作实例,从而为Java语言提供更多更灵活的想象空间。随便举几个例子:使用反射可以动态的映射Java对象属性到Json文件属性的操作,这一点无论在FastJson,还是GSON或者是jackson上都体现的淋漓尽致。此外使用反射可以轻松的用在JDBC中完成Java Bean和数据库表的动态适配组装,如我们熟知的hibnate,jpa,等持久化框架也都是利用了这种特性,最后无论是动态代理的AOP,还是OSGI的动态加载都离不开反射的辅助,由此可见反射的强大之处。
2、反射的类型
Java反射可以获取很多类的信息,如下:
(1)获取实例本身的信息
(2)获取实例的字段
(3)获取实例的构造函数
(4)获取实例的方法
(5)获取实例的私有的字段和方法
(6)获取实例的注解信息
(7)获取实例里面的数组
(8)获取实例的泛型类型
(9)获取实例的模块类型
(10)配合实现动态代理
(11)配合实现动态类的加载和热加载
3、反射是java的一个特性,这一特性也使得它给了广大的第三方框架和开发过者很大的想像空间。通过反射,java可以动态的加载未知的外部配置对象,临时生成字节码进行加载使用,从而使代码更灵活!可以极大地提高应用的扩展性!