MyBatis每次創(chuàng)建結果對象的新實例時,它都會使用一個對象工廠(ObjectFactory) 實例來完成。默認的對象工廠需要做的僅僅是實例化目標類,要么通過默認構造方法,要么在參數映射存在的時候通過參數構造方法來實例化。如果想覆蓋對象工廠的默認行為,則可以通過創(chuàng)建自己的對象工廠來實現。
// 自定義對象工廠
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配置文件中配置自定義對象工廠,如下所示:
<objectFactory type="cn.mybatis.factory.ExampleObjectFactory
<Property names="someProperty" value="100" />
</objectFactory>
ObjectFactory接口很簡單,它包含兩個創(chuàng)建對象的方法:一個是默認構造方法的;另外一個是處理帶參數的構造方法的。setProperties方法可以被用來配置ObjctFactory,在初始化 ObjectFactory 實例后,ObjectFactory 元素體中定義的屬性會被傳遞給 setProperties 方法。