反射是在运行的时候,知道要操作的类是什么,并且在运行时获取类的完整构造,并调用对应的
方法
1. 在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类的成员变量和方法
4.在运行时调用任意一个对象的方法,通过反射可以调用private修饰的方法
5.生成动态代理
1.spring框架里的IOC(控制反转)是基于反射创建对象和设置依赖属性
2.spring mvc 的请求是通过反射调用对应的方法
3.JDBC的class.forName 和 spring className方法也是通过反射的
增加程序的灵活性,避免将程序写死到代码里
性能上:
反射适用于对灵活性和拓展性很高的系统框架上,普通程序不建议使用
反射包括了一些动态类型,JVM无法对这些代码进行优化
内部暴露:
反射可以访问私有的属性和方法,可能会带来副作用,比如代码有功能上的错误,降低可移植性