学科分类
目录
SSM框架

<objectFactory>元素

MyBatis框架每次创建结果对象的新实例时,都会使用一个对象工厂(ObjectFactory)的实例来完成。MyBatis中默认的ObjectFactory的作用就是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。

通常情况下,我们使用默认的ObjectFactory即可,MyBatis中默认的ObjectFactory是由org.apache.ibatis.reflection.factory.DefaultObjectFactory来提供服务的。大部分场景下都不用配置和修改,但如果想覆盖ObjectFactory的默认行为,则可以通过自定义ObjectFactory来实现,具体方式如下。

(1)自定义一个对象工厂。自定义的对象工厂需要实现ObjectFactory接口,或者继承DefaultObjectFactory类。由于DefaultObjectFactory类已经实现了ObjectFactory接口,所以通过继承DefaultObjectFactory类实现即可,示例代码如下所示。

// 自定义工厂类
public class MyObjectFactory extends DefaultObjectFactory {
    private static final long serialVersionUID = -4114845625429965832L;
    public <T> T create(Class<T> type) {
        return super.create(type);
    }
    public <T> T create(Class<T> 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);
    }
}

(2)在配置文件中使用<objectFactory>元素配置自定义的ObjectFactory,如下所示。

<objectFactory type="com.itheima.factory.MyObjectFactory">
   <property name="name" value="MyObjectFactory"/>
</objectFactory>

由于自定义ObjectFactory在实际开发时不经常使用,这里读者只需要了解即可。

点击此处
隐藏目录