每次 MyBatis 創(chuàng)建結(jié)果對(duì)象的新實(shí)例時(shí),它都會(huì)使用一個(gè)對(duì)象工廠(?ObjectFactory
?)實(shí)例來(lái)完成實(shí)例化工作。 默認(rèn)的對(duì)象工廠需要做的僅僅是實(shí)例化目標(biāo)類,要么通過默認(rèn)無(wú)參構(gòu)造方法,要么通過存在的參數(shù)映射來(lái)調(diào)用帶有參數(shù)的構(gòu)造方法。 如果想覆蓋對(duì)象工廠的默認(rèn)行為,可以通過創(chuàng)建自己的對(duì)象工廠來(lái)實(shí)現(xiàn)。比如:
// ExampleObjectFactory.java
public class ExampleObjectFactory extends DefaultObjectFactory {
public Object create(Class type) {
return super.create(type);
}
public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) {
return super.create(type, constructorArgTypes, constructorArgs);
}
public void setProperties(Properties properties) {
super.setProperties(properties);
}
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
接口很簡(jiǎn)單,它包含兩個(gè)創(chuàng)建實(shí)例用的方法,一個(gè)是處理默認(rèn)無(wú)參構(gòu)造方法的,另外一個(gè)是處理帶參數(shù)的構(gòu)造方法的。 另外,?setProperties
方法可以被用來(lái)配置 ?ObjectFactory
?,在初始化你的 ?ObjectFactory
實(shí)例后, ?objectFactory
元素體中定義的屬性會(huì)被傳遞給 ?setProperties
方法。
更多建議: