sqlSession是线程不安全的,所以每次执行需要一个新的sqlSession,Spring是怎么做的?
由MyBatis杂记(2)可知 最终注入service的mapper是MapperProxy。
创建MapperFactoryBean时, ClassPathMapperScanner.processBeanDefinitions()中
if (!explicitFactoryUsed) {
LOGGER.debug(() -> "Enabling autowire by type for MapperFactoryBean with name '" + holder.getBeanName() + "'.");
definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
}
设置BeanDefinition:AutowireMode为AbstractBeanDefinition.AUTOWIRE_BY_TYPE
表示会调用MapperFactoryBean中setXXX()方法进行注入
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
if (this.sqlSessionTemplate == null || sqlSessionFactory != this.sqlSessionTemplate.getSqlSessionFactory()) {
this.sqlSes