1.@Bean注册SqlSessionFactory
SqlSesssionFactoryBean实现了FactoryBean接口和InitializingBean接口
1.1FactoryBean接口
FactoryBean接口有个getObject方法
当时使用bean的时候,会调用getObject来获取实例对象
要想获取原始对象可以前缀加&获取
1.2InitializingBean接口
初始化接口有一个接口方法afterPropertiesSet(),在类属性赋值完成的时候触发调用
mybatis使用这个特性来完成SqlSessionFactory的初始化工作
2.对接事务
从TransactionSynchronizationManager中获取Connection对象使用
3.mapper接口实例化成bean
3.1.解析MapperScan注解使用Import MapperScannerRegistrar实现 ImportBeanDefinitionRegistrar注册一个BeanDefinationRegistryPostprocessor类MapperScannerConfigurer
3.2.ClassPathMapperScanner集成ClassPathBeanDefinatinScanner,重新了isCandidateComponent方法只扫描接口
3.3.循环处理BeanDefination,修改class为MapperFactoryBean,添加属性mapper接口的class和sqlfactory