JOOR

276 阅读2分钟

jOOR简介

文档

jOOR功能介绍

  1. 提供on()操作符对类名、Class、Object进行统一实例化为Reflect对象,后续所有的反射操作基于该Reflect对象。
  2. 有功能调用方式均被封装成返回Reflect对象的链式结构,在使用上使得代码更加简洁。
  3. 对方法的签名匹配封装了更完善的匹配规则,包括精确匹配exactMethod()、近似匹配similarMethod()【对函数参数的近似匹配(int -> Integer)】和基类搜索等。
  4. 调用私有方法的不需要显示调用setAccessible(),内部动态读取public标记自动适配。
  5. 更加简洁的实现了对象构造函数的反射调用create()方法。
  6. 函数的调用call()方法组合成了可以拼接在Reflect的对象后面的链式方法。
  7. 额外增加了高级操作符as(),它实现了类的代理访问以及POJO对象的get/set/is方法实现。
 Reflect
     Reflect.on 包裹一个类或者对象,表示在这个类或对象上进行反射,类的值可以使Class,也可以是完整的类名(包含包名信息)
     Reflect.create 用来调用之前的类的构造方法,有两种重载,一种有参数,一种无参数
     Reflect.call 方法调用,传入方法名和参数,如有返回值还需要调用get
     Reflect.get 获取(field和method返回)值相关,会进行类型转换,常与call和field组合使用
     Reflect.field 获取属性值相关,需要调用get获取该值
     Reflect.set 设置属性相关。
     
     
 //1、通过类名转换成一个Reflect对象:
public static Reflect on(String name);
public static Reflect on(String name, ClassLoader classLoader);
public static Reflect on(Class<?> clazz);
 
//2、将一个类对象转换成一个Reflect对象:
public static Reflect on(Object object);
 
//3、修改一个AccessibleObject类型的对象的访问权限:
public static <T extends AccessibleObject> T accessible(T accessible);
 
//4、返回Reflect对象具体包装的类型,类型为Class或者对象,由操作符on()的重载参数决定:
public <T> T get()//5、将name指定的field转换成一个Reflect对象,后续对field的操作变为对Reflect对象的操作:
public Reflect field(String name);
 
//6、返回当前Reflect对象的所有field属性,并转换成Reflect对象的map:
public Map<String, Reflect> fields();
 
//7、修改(获取)field属性值:
public Reflect set(String name, Object value);
public <T> T get(String name);
 
//8、反射调用name指定的函数,此函数封装了对函数的签名的精准匹配和近似匹配:
public Reflect call(String name);
public Reflect call(String name, Object... args);
 
//9、反射调用指定类的构造函数,也封装了精准匹配和近似匹配:
public Reflect create();
public Reflect create(Object... args);
 
//10、返回当前Reflect对象封装的对象类型:
public Class<?> type()//11、给封装对象创建一个代理访问,还实现了对POJO对象的setXX/getXX/isxx功能(此为Reflect对象的高级功能):
public <P> P as(Class<P> proxyType);

引用:blog.csdn.net/zhangmiaopi…