- 什么是反射
- 反射的优缺点
- 优点
- 缺点
- 反射的使用场景
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
反射的优缺点 优点能够使代码更加灵活
缺点-
存在安全问题
可以无视泛型的参数问题、可以无视权限问题(public private)
例如:
我们在获取所有属性的时候采用的是getFields()方法,这个方法只能获取公共的(public修饰的)属性,但是私有属性无法获取,但是我们使用了getDeclearedFields()方法则会获取所有的属性,包括私有属性,在此刻可以理解为对封装的一种拆离
以及setAccessible() 可以直接无视private 的控制.
Class test = Class.forName("Util.Persion"); Persion persion=new Persion(); //先获取一个属性 Field field =test.getDeclaredField("username"); // 方法为私有,关闭权限检测 field.set(persion,"KDA"); System.out.println(persion.getUsername());执行结果:
field.setAccessible(true);
报错停止,切记这行代码添加到set方法上方
-
性能差
在获取对象的时候我们的方式很多种,最基本的就是直接直接创建和反射,而反射还存在要不要进行权限检测,那么在这里进行一次测试
public class test03 { public static void main(String[] args) throws ClassNotFoundException { long start = System.currentTimeMillis(); for (int i = 0; i < 100000000; i++) { Persion persion = new Persion(); } long end = System.currentTimeMillis(); System.out.println(end-start); start=System.currentTimeMillis(); for (int i = 0; i < 100000000; i++) { Class Test= Class.forName("Util.Persion"); } end=System.currentTimeMillis(); System.out.println(end-start); } }执行结果为:
14 95270
这是检查显而易见。
反射的使用场景-
框架 例如:Spring SpringBoot框架
-
动态代理
这是一个JDBC的代码,这里使用反射进行加载Driver从而实现注册,实现动态加载。
-
模块式开发
-



