携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
MyBatis源码解读系列文章
ObjectFactory概述
ObjectFactory是MyBatis中的对象工厂。ObjectFactory接口只有一个默认的实现,即DefaultObjectFactory。
代码示例
使用ObjectFactory创建对象的案例代码如下:
ObjectFactory objectFactory = new DefaultObjectFactory();
List<Integer> list = objectFactory.create(List.class);
list.addAll(Arrays.asList(1, 2, 3));
System.out.println(list);
DefaultObjectFactory实现类支持通过接口的方式创建对象。例如当我们指定创建java.util.List实例时,实际上创建的是java.util.ArrayList对象。
DefaultObjectFactory支持的接口:
java.util.List-->java.util.ArrayListjava.util.Collection-->java.util.ArrayListjava.lang.Iterable-->java.util.ArrayListjava.util.Map-->java.util.HashMapjava.util.SortedSet-->java.util.TreeSetjava.util.Set-->java.util.HashSet
某些场景下,在得到映射结果之前我们可能需要处理一些逻辑,或者在执行该类的有参构造方法时,在传入参数之前,要对参数进行一些处理,这时我们可以通过自定义ObjectFactory来实现。
自定义ObjectFactory代码示例:
public class CustomObjectFactory extends DefaultObjectFactory {
@Override
public Object create(Class type) {
if (Objects.equals(type, User.class)) {
// 实例化 User 类
User user = super.create(User.class);
// 需要处理的业务逻辑
user.setId(UUID.randomUUID().toString());
return user;
}
return super.create(type);
}
}
我们实现自定义ObjectFactory只需要继承DefaultObjectFactory然后重写create()方法即可。
自定义ObjectFactory后还需要在MyBatis配置文件中通过<objectFactory >标签配置自定义的ObjectFactory,具体如下:
<objectFactory type="com.mybatis.test.CustomObjectFactory">
<property name="someProperty" value="value1" />
</objectFactory>
好了,关于ObjectFactory我们就介绍这些内容。
如果觉得文章写得还凑合,还麻烦您动动小手帮忙点个赞呗。您的支持是我更文的动力。目前在写的系列有下面几个系统:
- MyBatis源码解读
- 设计模式
- 一起学Three.js
- Spring Boot
- Spring Cloud
都是一些平时工作中用到的知识点的个人总结和学习笔记。