mybatis适配spring具体可以参考mybatis-spring-1.3.2.jar
该适配jar的类非常少,主要的入口也是从使用出发:
org.mybatis.spring.mapper.MapperScannerConfigurer 该类实现了多个扩展点:BeanDefinitionRegistryPostProcessor, InitializingBean, ApplicationContextAware, BeanNameAware
- BeanDefinitionRegistryPostProcessor
其中的核心是在postProcessBeanDefinitionRegistry。该方法来自于BeanDefinitionRegistryPostProcessor,其作用是动态添加bean到容器中,mybatis在这个方法中,拿到注入的一些sqlSessionFactory和sqlSessionTemplate和该方法的参数BeanDefinitionRegistry进行动态装在。该类把这些属性赋值给ClassPathMapperScanner,让该方法去执行实际代码。
- ClassPathMapperScanner
该类集成了ClassPathBeanDefinitionScanner,这个类有点像是独立的类,可以做一些扫描代码。就好比是spring中的StringUtils类一样,你可以单独去使用。在该类里面,会优先调用super.doScan(basePackages);获得返回值后对其进行处理。比如说之前的beanClass是接口Mapper,这里则改为mapperFactoryBean(当bean配置的是FactoryBean的时候,beanFactory调用getBean获取的不是这个Bean的实例,而是该FactoryBean的getObject队形)
网友评论