每当MyBatis创建一个结果对象的新实例时,它会使用ObjectFactory实例来完成。默认的ObjectFactory仅仅是使用默认构造函数或带有参数的构造函数(如果存在参数映射)实例化目标类。如果您想要覆盖ObjectFactory的默认行为,可以创建自己的ObjectFactory。例如:
// ExampleObjectFactory.java
public class ExampleObjectFactory extends DefaultObjectFactory {
@Override
public <T> T create(Class<T> type) {
return super.create(type);
}
@Override
public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, List<Object> constructorArgs) {
return super.create(type, constructorArgTypes, constructorArgs);
}
@Override
public void setProperties(Properties properties) {
super.setProperties(properties);
}
@Override
public <T> boolean isCollection(Class<T> type) {
return Collection.class.isAssignableFrom(type);
}
}
<!-- mybatis-config.xml -->
<objectFactory type="org.mybatis.example.ExampleObjectFactory">
<property name="someProperty" value="100"/>
</objectFactory>
ObjectFactory接口非常简单。它包含两个create方法,一个用于处理默认构造函数,另一个用于处理带有参数的构造函数。最后,setProperties方法可以用来配置ObjectFactory。在objectFactory元素的主体中定义的属性将在ObjectFactory实例初始化后传递给setProperties方法。