Mybatis工具—反射工具(MetaClass)

  MetaClass同MetaObject一样,是Mybatis中的反射工具类。其位于Mybatis源码包中的org.apache.ibatis.reflection。从该类的命名不难看出,这个类主要的职责就是获取目标类相关信息。MetaClass与MetaObject二者主要区别在于:MetaObject用于获取和设置对象的属性值,MetaClass则用于获取类的相关信息。换言之,MetaObject主要负责操作目标对象对应的属性值,MetaClass主要负责操作目标对象对应的类的一些信息(如获取构造方法,getter方法的属性名)。

@Data
public class Robot{
    private String name;
}

MetaClass metaClass = MetaClass.forClass(
    Robot.class, new DefaultReflectorFactory());
// 获取有getter方法的属性名
String[] names = metaClass.getGetterNames();
// 是否有默认的构造方法
metaClass.hasDefaultConstructor();

  从上述示例代码可以看出,使用MetaClass.forClass方法构造MetaClass对象时,在需要传入目标对象的基础上,还需要传入一个实现ReflectorFactory接口的DefaultReflectorFactory反射工厂。接下来将进入MetaClass.forClass方法的源码细则。

MetaClass的构造

private MetaClass(Class<?> type, ReflectorFactory reflectorFactory) {
    this.reflectorFactory = reflectorFactory;
    this.reflector = reflectorFactory.findForClass(type);
}

/**
 * @param type               原始对象
 * @param reflectorFactory   反射工厂
 */ 
public static MetaClass forClass(
    Class<?> type, ReflectorFactory reflectorFactory) {
    return new MetaClass(type, reflectorFactory);
}

  从Mybatis源代码来看,MetaClass同样把自己的构造方法设置为了private私有域,所以如果想要构造MetaClass对象,就只能使用MetaClass类提供的forClass方法来构造。forClass方法有两个参数,一个是表示要操作对象的type,一个是用于反射操作的reflectorFactory。forClass在拿到这两个参数之后,再去调用MetaClass对象的构造方法来设置属性值和生成一个Reflector对象,并赋值给MetaClass中对应的reflector属性。
  Reflector对象是用于缓存当前目标对象中对应的类定义信息,如构造方法或者Setter方法对应的所有属性名等类中的一些细节信息,都将在构造MetaClass对象的时候读取并放入reflector属性。

MetaClass操作类

  MetaClass提供了许多方法来获取Java类的基本信息,其中包括类中所有的Getter方法对应的属性名称和是否有默认的构造方法等信息,甚至可以通过MetaClass获取Getter/Setter方法对应的Invoker对象,

  1. String[] getSetterNames(),获取类中所有的Setter方法对应的属性名。
  2. String[] getGetterNames(),获取类中所有的Getter方法对应的属性名。
  3. Invoker getGetInvoker(String name),获取name属性对应的Get Invoker对象。
  4. Invoker getSetInvoker(String name),获取name属性对应Set Invoker对象。
  5. boolean hasDefaultConstructor(),判断类是否有默认的构造方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐只乐之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值