栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring源码分析(七)Spring整合mybatis 源码分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring源码分析(七)Spring整合mybatis 源码分析

​​​​​​​​​​​​​​​​​​​​​https://blog.csdn.net/caicongyang/category_2139981.html?spm=1001.2014.3001.5482 

我的其他Spring源码分析如上

1. @MapperScan注解中引入MapperScannerRegistrar

2.MapperScannerRegistrar继承了importBeanDefinitionRegistrar,在Spring其中过程中会调用其中的registerBeanDefinitions方法 得到一个 MapperScannerConfigurer 对象

3. 同时MapperScannerConfigurer是一个BeanDefinitionRegistryPostProcessor对象,会在Spring启动过程中调用postProcessBeanDefinitionRegistry方法;

4.在postProcessBeanDefinitionRegistry 方法钟实现中mybatis 自定义ClassPathMapperScanner 实现了Spring的 ClassPathBeanDefinitionScanner将mybatis的mapper接口扫描进来成为一个Spring的bean

5.把扫描下来的BeanDefinition进行修改,把beanClass 修改成为MapperFactoryBean,并把AutowireMode修改为byType

6.在MapperFactoryBean中的getObject方法中,调用了getSqlSession()去得到一个sqlSession 对象,然后根据对应的Mapper接口生成一个Mapper接口代理对象,这个代理对象就成为 Spring容器中的Bean

7.sqlSession对象是Mybatis中的,一个sqlSession对象需要SqlSessionFactory来产生

8.MapperFactoryBean的AutowireMode为byType,所以Spring会自动调用set方法,有两个set 方法,一个setSqlSessionFactory,一个setSqlSessionTemplate,而这两个方法执行的前提是 根据方法参数类型能找到对应的bean,所以Spring容器中要存在SqlSessionFactory类型的 bean或者SqlSessionTemplate类型的bean。

9.如果你定义的是一个SqlSessionFactory类型的bean,那么最终也会被包装为一个 SqlSessionTemplate对象,并且赋值给sqlSession属性

10.而在SqlSessionTemplate类中就存在一个getMapper方法,这个方法中就产生一个Mapper接 口代理对象

11.后续流程就会进入到Mybatis框架的底层执行流程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号