一、什么是反射?
一般Java对象的类型在编译器就已经确定下来了在运行的时候可能会动态加载一些类,但是这些类在之前并没有用到,所以他没有加载到Java虚拟机里面,这个时候就可以使用反射机制进行加载
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象, 都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
二、反射的优缺点?
优点: 通过配置文件设定要反射的类,即可自动完成对象的实例化,然后进行相应操作,完全不需要更改java源代码,提高了程序的灵活性和拓展性。
缺点: 打破封装、私有属性会被访问;反射机制是动态解析的,JVM无法进行代码优化。
三、反射机制的主要应用场景
- 用于反编译将.Class 文件转换成.Java 文件
- Spring框架的配置使用的就是反射来动态加载对象:
我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;
Spring框架的IOC (动态加载管理Bean) 创建对象以及AOP (动态代理)功能都和反射有联系;