小言_互联网的博客

关于工厂Bean的使用

259人阅读  评论(0)

为什么使用工厂Bean?

在Spring工厂中,有些bean无法通过简单的生产,比如:Connection,SqlSessionFactory,所以我们就使用FactoryBean来解决此问题,他是Spring工厂中的一种特殊的Bean,可以生产对象。相当于Spring工厂中的小作坊。

使用方法:

首先在我们的applicationContext.xml中进行以下配置:
<!--工厂Bean细节
	1:factorybean的生命周期和常规的bean相同
	2:当用户通过getbean获取一个Factorybean时,返回的不是factorybean本身,而是他所生产的对象
	3:当想获得工厂的bean本身,需要 "&beanID"=="&mySqlSessionFactory"
-->
<bean id="mySqlSession" class="com.hs.factorybean.mysql" ></bean>
编写mySqlSessionFactory类:
public class mySqlSessionFactory implements FactoryBean<SqlSessionFactory>{
	//主题逻辑  完成某种复杂对象的生成
	@Override
    public SqlSessionFactory getObject() throws Exception {
        Reader reader = Resources.getResourceAsReader("mybatis配置文件(别名,数据库连接,映射配置)");
        //此处要注意Resouces导包为import org.apache.ibatis.io.Resources;
        

        return new SqlSessionFactoryBuilder().build(reader);
    }

    //返回复杂对象的类对象
    @Override
    public Class<?> getObjectType() {
        return null;
    }

    //控制复杂对象的创建模式
    @Override
    public boolean isSingleton() {
        return false;
    }
}
调用
//创建Spring的IOC容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//从IOC实例中获取Bean的实例(此处为Factorybean生产的SqlSessionFactory对象)
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory ) context.getBean("在前面applactionContext.xml中配置的id");
//获取User接口的实例
UserDao userDao = sqlSessionFactory.openSession()getMapper(UserDao.class);
//调用方法
userDao.insertUser();

以此就完成了复杂类型的生产(未new任何对象),非常的方便。


转载:https://blog.csdn.net/weixin_44057670/article/details/101305991
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场