有兩種方式
- xml方式
- 注解方式
- xml是把配置寫到xml文件里,由 ClassPathXmlApplicationContext來加載单绑;注解是另一個有@Configuration的配置類加載配置傲武。原理都是把MapperScan的basePackage掃描成BeanDefinition,然后放到spring容器BeanDefintionMap中蓉驹。最后修改BeanDefinition,把class修改為MapperFactoryBean,在最后生成bean的時候是生成 MapperProxy代理。
注解方法關(guān)鍵點
- 兩種方式:@MapperScan方式和加一個@bean MapperScannerConfigurer
- @MapperScan()方式是通過@Import()一個ImportBeanDefinitionRegistrar揪利,通過registerBeanDefinition()方法态兴,生成一個ClassPathMapperScanner對象,來掃描加載BeanDefintion和生成 MapperFactoryBean,MapperProxy
- MapperScannerConfigurer類疟位,繼承了BeanDefinitionRegistryPostProcessor extend BeanFactoryPostProcessor; BeanFactoryPostProcessor是專門來維護修改BeanDefinition的瞻润。在postProcessBeanDefinitionRegistry()方法里,也是直接通過ClassPathMapperScanner對象生成BeanDefinition,MapperFactoryBean,MapperProxy甜刻,和第一種方式一樣