【Spring】Spring整合Mybatis核心原理分析

Spring整合Mybatis核心原理分析


Mybatis的注册逻辑:实现ImportBeanDefinitionRegistrar接口,重写其registerBeanDefinitions方法 :注册mapper接口,并将接口声明为FactoryBean,设置拦截方法,生成代理类。

参考

1.3.2版本

通过@MapperScan导入了MapperScannerRegistrar类

  • MapperScannerRegistrar类实现了ImportBeanDefinitionRegistrar接口,所以Spring在启动时会调用MapperScannerRegistrar类中的registerBeanDefinitions方法
    • 定义了一个ClassPathMapperScanner对象
      ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
      
    • 拿到需要扫描的包名
    • 设置ClassPathMapperScanner对象可以扫描到接口
    • scanner.doScan() 扫描包
      • 扫描类路径查找候选组件
        • 执行scanCandidateComponents()
          • 重写的isCandidateComponent()认为接口是备选者Component
      • 通过利用Spring的扫描后,会把接口扫描出来并且得到对应的BeanDefinition
      • 接下来把扫描得到的BeanDefinition进行修改,把BeanClass修改为MapperFactoryBean,把AutowireMode修改为byType
      • 扫描完成后,Spring就会基于BeanDefinition去创建Bean了,相当于每个Mapper对应一个FactoryBean(单例的)
        • 在MapperFactoryBean中的getObject方法中,调用了getSqlSession()去得到一个sqlSession对象,然后根据对应的Mapper接口生成一个代理对象
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值