编程中直接用到反射的地方很少,不过研究Spring、mybatis等框架会发现,反射是实现这些框架的基础。让我们一块看下反射和它的应用吧。
1、什么是反射2、class加载方法3、反射获取属性和方法
本文中包含代码较多,最好可以动手写一下,更容易理解
一、反射的定义
反射机制是指在程序的运行状态中,可以构造任意类的对象,了解任意对象所属的类,了解任意类的成员变量和方法,可以调用任意对象的属性和方法。
即,对类和实例化对象可以动态进行以下操作:
1、通过类构造实例化对象2、通过类读取类包含的属性方法3、通过实例化对象获取类的信息4、通过实例化对象操作对象的所有属性和方法
这么方便的操作,为什么在日常编码中很少直接使用呢,反射有如下问题:
1、性能差,反射是一种解释性操作,直接通知JVM进行的操作,无法进行代码优化,比直接使用类和实例化对象要慢的多。
2、安全问题,通过反射可以执行实例化对象所有的属性方法,包括private的方法,会引起一些安全错误
3、可读维护性差,使用反射相对直接调用,不能直观的看到调用的属性方法,出问题了,代码的可读、调试和维护性会很差
4、抽象性,对象改变了,反射中的逻辑可能无法感知,引起一些莫名的错误
二、Class的获取
反射的第一步需要获取Class对象,怎么获取呢
首先构建一个pojo对象Person作为例子
@Slf4jpublic class Person {static {log.info("I am person");}public Person(String name){this.name=name;}public Person(){}public int id;private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name