反射

运行时分析任意的对象。

获取Class

  • String dassName = "java.util .Random"; Class cl = Class.forName(dassName);
  • getClass方法
  • Class dl = Random.class; Gass cl 2 = int.class;Class cl 3 = Doublet.class;

反射分析类的能力

java.lang.reflect 包中有三个类 Field、 Method 和 Constructor 分别用于描述类的域、 方法和构造器

运行时分析对象

  • setAccessible方法 访问私有域,setAccessible是AccessibleObject 类中的一个方法,它是 Field、 Method 和 Constructor类的公共超类。

优点:易于编写通用性代码
缺点:编译时不容易发现问题,运行时易出错。

泛型类型的继承规则

S extends T 但 Pair<S> 与 Pair<T>没有什么联系,如下:

1
2
ArrayList<Parent1> aa = new ArrayList<Sun2>(); // ERROR
Parent1[] aaaa = new Sun2[1]; // TRUE

springboot使用反射

ReflectionEnvironmentPostProcessorsFactory.getEnvironmentPostProcessors()

准备环境,创建PostProcessor类
使用Instantiator对象利用反射创建PostProcessor实例