问题
Spring项目整合MyBatis时使用MyBatis-Spring,配置回话工厂时使用如下代码。
分析:在基础的MyBatis用法中是通过SqlSessionFactoryBuilder来创建SqlSessionFactory的。而在MyBatis-Spring中,则使用SqlSessionFactoryBean创建SqlSessionFactory。
<!-- MyBatis会话工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
......
</bean>
SqlSessionFactoryBean如何创建SqlSessionFactory实例呢?
分析
SqlSessionFactoryBean实现了Spring的 FactoryBean接口(通过工厂 bean 自定义实例化逻辑)。这意味着由Spring最终创建的bean并不是SqlSessionFactoryBean本身,而是工厂类(SqlSessionFactoryBean)的getObject()方法的返回结果。这种情况下,Spring将会在应用启动时为你创建SqlSessionFactory,并使用sqlSessionFactory 这个名字存储起来。
等效的 Java 代码如下:
@Bean
public SqlSessionFactory sqlSessionFactory() {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factory