反射机制被视作动态语言的关键,允许程序在执行期间借助ReflectionAPI获取任何类的内部信息,并直接操作类的内部属性方法。
反射的用途
- 动态加载类:程序可以在运行时动态的加载库中的类。
- 动态创建反射对象:程序运行时,动态创建对象实例。
- 调用方法:反射可以根据方法名称,动态调用对象的方法(即使方法在编写程序时还没有定义)。
- 访问成员变量:根据成员变量名称,可以访问和修改成员变量(反射可以访问私有成员 变量!!违背了面向对象的封装性)。
- 运行时查看类型信息:反射运行程序在运行时,查询对象的类型信息。
Spring 框架使用反射来自动装配组件,实现依赖注入
MyBatis框架使用反射来创建resultType对象,封装数据查询结果
反射机制优缺点
- 优点:
- 代码可以更加灵活和动态
- 突破访问限制,能够直接访问到private的方法和属性
- 缺点
- 性能开销大,反射调用比直接调用慢了数倍
- 破坏了封装性,有安全问题
