为什么使用工厂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
查看评论