mybatis与spring结合

首先要理解spring的五大扩展点

1、BeanPostProcessor,可以管理一个Bean的初始化,对一个Bean生成代理就是在这个阶段执行。

2、BeanDefinitionRegistryPostProcessor,可以将一个自己的Bean注册到Spring容器中,mybatis扫描到mapper生成代理对象后就是基于这个扩展点注册到容器中的,mybatis在MapperScannerConfigurer

实现对bean的扫描然后注册。

3、BeanFactoryPostProcessor,是BeanDefinitionRegistryPostProcessor的子接口

4、ImportBeanDefinitionRegistrar,可以将一个bean注册到Spring容器中,用于从外部所需的Bean注册到Spring容器中

5、ImportSelector,将一个字符串数组生成bean并且递归处理

首先MapperScan->MapperScannerRegistrar(该类是一个ImportBeanDefinitionRegistrar子类在容器扫描到有Import标签时会进行处理)->MapperScannerConfigurer(该类是一个ImportBeanDefinitionRegistrar子类在容器扫描到有Import标签时会进行处理),

关于为啥选用ImportBeanDefinitionRegistrar不选用BeanDefinitionRegistryPostProcessor呢,因为ImportBeanDefinitionRegistrar处理实在普通SpringBean处理完成后才调用,只有这样mybatis依赖的一些需要spring先初始化完成后才能初始化mybatis里面的mapper,所以mybatis的mapper到bean其实是分在两个扩展点里面实施的。

首先是ConfigurationClassPostProcessor的postProcessBeanDefinitionRegistry方法中处理了Import标签和所有的spring要管理的bean容器,然后调用ImportBeanDefinitionRegistrar里面registerBeanDefinitions方法将MapperScannerConfigurer注册到了Spring容器中,然后Spring再调用postProcessBeanDefinitionRegistry来处理mapper的扫描

 该类负责扫描mybatis的bean并且注册到容器中。

猜你喜欢

转载自www.cnblogs.com/xiaofeiyang/p/11789528.html
今日推荐