Springboot2是如何将mybatis mapper注入ioc

前提: 首先要了解ioc的步骤,先解析,定义beanDefiniton, 在调用工厂类getObject

1.@MapperScan basePackages 指定包路径

2. @Import(MapperScannerRegistrar.class)

MapperScannerRegistrar 实现了ImportBeanDefinitionRegistrar  并重写了方法registerBeanDefinitions();
public class MapperScannerRegistrar implements ImportBeanDefinitionRegistrar, ResourceLoaderAware {

}

registerBeanDefinitions()中将   MapperScannerConfigurer  添加配置参数,并注入到了BeanDefinition容器中

3   MapperScannerConfigurer  实现了BeanDefinitionRegistryPostProcessor

4  ClassPathMapperScanner 将 mapper 生成  BeanDefinitionHolder 添加到容器中。   

5 ,当执行ioc 容器的bean 加载时, singletonObject = singletonFactory.getObject();

这是 MapperFactoryBean 回去调用 getObject()重写的方法

public T getObject() throws Exception {
  return getSqlSession().getMapper(this.mapperInterface);
}

返回jdk 代理对象

6 .那么MapperScannerConfigurer  什么时候被调用呢? 

启动类springApplication 

 最终AbstractApplicationContext 类下的refresh

PostProcessorRegistrationDelegate  类 invokeBeanFactoryPostProcessors方法

 加载实现BeanDefinitionRegistryPostProcessor.class  的类型 , 便将MapperScannerConfigurer 的加载出来。 最后调用 invokeBeanDefinitionRegistryPostProcessors方法   , 调用了MapperScannerConfigurer容器中。   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值