反射机制

何为反射

反射是框架设计的灵魂。在运行时才通过类名动态的将class对象加载进内存,通过类的class对象就可以获取类的全部信息,包括方法,字段等。一般常用于框架设计中。

创建一个对象的过程

  • 将字节码文件加载进内存,形成运行时内存结构,形成class对象。
  • 分配堆内存空间。
  • 调用构造器,创造一个空白对象。
  • 子类调用父类构造器。
  • 执行子类构造器。

img

所以,实例化一个对象,是离不开class对象的。

class对象

class对象主要包含Field,Method,Constructor。

img

因此,class对象包含了这个类的所有信息,通过Field,Method就可以直接访问类的成员。

反射使用

获取class对象

1
2
3
Class c2 = Class.forName("[D");
Class c1 = Boolean.class;
Class c4 = instance.getClass();

获取成员

getField

通过反射甚至可以访问私有变量。

获取并调用方法

1
2
3
4
5
6
7
8
Class<?> klass = methodClass.class;
//创建methodClass的实例
Object obj = klass.newInstance();
//获取methodClass类的add方法,传入int.class是为了确定唯一的方法,以防重载
Method method = klass.getMethod("add",int.class,int.class);
//调用method对应的方法 => add(1,4)
Object result = method.invoke(obj,1,4);
System.out.println(result);

应用场景

JDBC数据库连接

Spring框架配置