mybatis適配spring具體可以參考mybatis-spring-1.3.2.jar
該適配jar的類非常少乞巧,主要的入口也是從使用出發(fā):
org.mybatis.spring.mapper.MapperScannerConfigurer 該類實(shí)現(xiàn)了多個(gè)擴(kuò)展點(diǎn):BeanDefinitionRegistryPostProcessor, InitializingBean, ApplicationContextAware, BeanNameAware
- BeanDefinitionRegistryPostProcessor
其中的核心是在postProcessBeanDefinitionRegistry。該方法來自于BeanDefinitionRegistryPostProcessor,其作用是動(dòng)態(tài)添加bean到容器中,mybatis在這個(gè)方法中,拿到注入的一些sqlSessionFactory和sqlSessionTemplate和該方法的參數(shù)BeanDefinitionRegistry進(jìn)行動(dòng)態(tài)裝在。該類把這些屬性賦值給ClassPathMapperScanner沉衣,讓該方法去執(zhí)行實(shí)際代碼睬隶。
- ClassPathMapperScanner
該類集成了ClassPathBeanDefinitionScanner锣夹,這個(gè)類有點(diǎn)像是獨(dú)立的類,可以做一些掃描代碼苏潜。就好比是spring中的StringUtils類一樣银萍,你可以單獨(dú)去使用。在該類里面恤左,會優(yōu)先調(diào)用super.doScan(basePackages);獲得返回值后對其進(jìn)行處理贴唇。比如說之前的beanClass是接口Mapper,這里則改為mapperFactoryBean(當(dāng)bean配置的是FactoryBean的時(shí)候飞袋,beanFactory調(diào)用getBean獲取的不是這個(gè)Bean的實(shí)例戳气,而是該FactoryBean的getObject隊(duì)形)