Mybatis学习笔记之用到的反射类

本文详细介绍了Mybatis中的反射机制,包括ObjectFactory对象的创建、Reflector反射器及其相关类,以及MetaObject的使用,如MetaClass元数据和ObjectWrapper对象包装器。通过对Mybatis源码的分析,揭示了反射在Mybatis中的简单应用。
摘要由CSDN通过智能技术生成

介绍

Mybatis中与反射有关的类主要在 org.apache.ibatis.reflection 包下,主要涉及以下几个方面

  1. 对象的创建 -> ObjectFactory
  2. 类的Class对象解析 -> Reflector
  3. 对象字段值的设置和相关信息的获取 -> MetaObject

反射的基础知识可以参考这篇文章:https://blog.csdn.net/weixin_45341408/article/details/109902262

ObjectFactory对象的创建

首先看看java中有哪些创建对象的方式:

  1. 通过new的方式,但是有个必要条件就是,使用new的时候当前对象已经存在了
  2. Class.newInstance和Constructor.newInstance,通过反射创建对象
  3. 通过对象的clone方法创建对象,但是有几个约定,具体参考Object类clone方法上的注释(浅拷贝)
  4. 反序列化创建对象,参见Serializable接口的注释(深拷贝)
  5. Unsafe.allocateInstance,直接为对象分配内存空间,绕过了构造器的调用,这个实在是太霸道了,不推荐使用

再来看看ObjectFactory接口中有哪些方法:

//mybatis使用ObjectFactory 创建所有所需的新对象
public interface ObjectFactory {
   

  //这个方法用于自定义ObjectFactory接口实现类时传递的参数,稍后介绍
  default void setProperties(Properties properties) {
   
    // NOP
  }
  
 //使用无参构造器创建对象
  <T> T create(Class<T> type);

 //使用指定参数的构造器创建对象
  <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, List<Object> constructorArgs);

 //判断指定类型是否是集合类型
  <T> boolean isCollection(Class<T> type);

}

介绍ObjectFactory#setProperties(Properties)方法:
我们可以在mybatis-config.xml配置文件中指定自定义的ObjectFactory接口实现类,同时指定一些额外属性信息:

<configuration>
    <objectFactory type="com.xxx.MyObjectFactory">
        <property name="name" value="zs"/>
        <property name="age" value="18"/>
    </objectFactory>
 </configuration>

mybatis在解析完<objectFactory>标签后会把子标签<property>封装成一个Properti

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值