-
定义:反射能够在程序运行时获取一个类的所有信息,比如属性和方法,并且能够使用这个类的所有属性和方法
-
作用:让代码更灵活,降低耦合度
-
常见API:
- 获取Class对象,使用xxx.getClass()方法和Class.forName()
- 获取Class对象的实例,使用nexInstance()方法
- 获取类的属性和方法,使用getField()和getMethod()方法
- 调用这个类的方法,使用invoke()方法
- 关闭安全检查,访问该类的私有属性和方法,使用setAccessible(true)
-
使用场景:项目中打日志使用的就是AOP+反射+注解,通过反射获取自定义日志注解修饰的方法,打印这个方法的请求参数和执行时间,方便后序接口调优
-
性能:反射确实存在性能问题,比直接调用慢了一个数量级。但是我们可以用一些缓存机制优化反射,比如缓存Method对象,关闭安全检查