反射的原理是什么?有哪些应用场景?
先自己想一想,再看参考要点
参考要点
- 类加载时 JVM 根据 .class 文件创建 Class 对象,反射通过它在运行时取得类的信息,类名可以到运行时才确定
- 用 Field 读写字段,Method 的 invoke() 调用方法,Constructor 的 newInstance() 创建对象
- 应用:Spring 创建 Bean 并注入、MyBatis 写入结果字段、JUnit 调用 @Test 方法、JDK 动态代理
- 缺点是有性能开销(框架会缓存 Method 对象),类名和方法名写成字符串、失去编译期检查,JDK 16 起默认不能反射访问 JDK 内部的私有成员,会破坏封装