前言
反射技术是非常关键的一项技术,在动态代理、spring IOC容器、AOP中广泛应用。某些场景下,在类编译时并不知道类的确切类型,只有在运行时才可确定其类型。
反射简介及使用
反射指运行时获取类的相关信息,包括类的字段、方法构造器等信息。有了这些信息我们可以做很多事情,例如类实例对象的创建;方法名称、参数的获取;字段名称获取等。反射在运行时获取这些信息,需要在运行时打开和检查Class文件。
类信息获取
获取类信息有四种方法:类对象、Class的forName()方法、类实例对象的getClass()方法、类加载器的loadClass()方法。
1 | // 根据类对象获取类信息 |
字段获取
可以通过实例对象获取字段信息(字段名称、类型、值),并且可以对字段进行复制等操作
1 | public Object getFieldByName(Object instance, String fieldName, Object value) throws Exception { |
方法信息获取
通过类信息可获取方法的名称、方法参数、返回值类型等信息,还可通过invoke()方法执行实例对象的某个方法。
1 | public Object[] getMethodByName(Object instance, Object[] params) throws Exception { |
构造方法获取
根据构造函数的入参类型,可以获取类的构造函数。默认构造函数的入参为null,并可通过构造函数创建对象。getDeclaredConstructor(null)或者getConstructor(null)均可获取默认构造。
1 | public Object getConstructor(Object instance) throws Exception{ |