MyBatis中SqlSessionFactoryBean的作用

    在使用Spring+MyBatis的环境下,我们需要配值一个SqlSessionFactoryBean来充当SqlSessionFactory,这里我们要搞清楚的就是为什么SqlSessionFactoryBean为什么能在Spring IOC容器中以SqlSessionFactory的类型保存并被获取。

      我们来看看SqlSessionFactoryBean的定义是怎样的:

public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {

}

能被Spring IOC容器管理的原因就是FactoryBean这个接口了,这是个支持泛型的接口:

public interface FactoryBean<T> {
	@Nullable
	T getObject() throws Exception;
	
	@Nullable
	Class<?> getObjectType();
	
	default boolean isSingleton() {
		return true;
	}
}

当实现了这个接口的Bean在配置为被Spring接管时,存入IOC容器中的实例类型将会是实例化泛型的那个类型,从IOC容器中获取时也是实例化泛型的那个类型,这种情况下,Spring 将会在应用启动时为你 创建SqlSessionFactory对象,然后将它以 SqlSessionFactory为名来存储。当把这个bean注入到Spring中去了以后,IOC容器中的其他类型就可以拿到SqlSession实例了,就可以进行相关的SQL执行任务了。

猜你喜欢

转载自blog.csdn.net/tales522/article/details/80993175
今日推荐