反射的应用场景有哪些?反射有什么优缺点?
应用场景
反射是Java框架的灵魂技术,很多框架都使用了反射技术,如Spring,Mybatis,Hibernate等。
JDBC 的数据库的连接
在JDBC连接数据库中,一般包括加载驱动,获得数据库连接等步骤。而加载驱动,就是引入相关Jar包后,通过Class.forName()加载数据库的驱动程序。
Class.forName("com.MySQL.cj.jdbc.Driver");
xml或properties等配置文件加载
Spring 通过 XML 配置模式装载 bean,也是反射的一个典型例子。
装载过程:
- 将程序内XML 配置文件加载入内存中
- java类解析xml或者properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息
- 使用反射机制,得到Class实例
- 动态配置实例的属性
这样做当然是有好处的不用每次都去new实例了,并且可以修改配置文件,比较灵活。
反射的优点:
动态性:反射提供了在运行时动态地探索和操作类的能力。它允许我们在运行时获取类的信息、创建对象、调用方法和修改字段的值,从而使程序更加灵活、可扩展和动态。
适应复杂环境::反射可以应对一些复杂的场景,如在插件化系统中根据配置文件加载类、动态代理、识别和处理注解等。
反射的缺点:
性能问题:由于反射涉及到动态解析和调用,所以它通常比直接调用代码性能较低。反射需要进行额外的检查和处理,可能会导致性能下降。
安全问题:反射可以绕过访问控制限制,例如访问私有方法和字段。这可能会导致安全隐患,因此在使用反射时需要小心处理,并确保只在必要情况下使用