Mybatis源码解析-MapperProxy的创建
2022/3/10 9:14:48
本文主要是介绍Mybatis源码解析-MapperProxy的创建,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基于SpringBoot的Mybatis源码解析:
SpringBoot版本如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.2</version> <relativePath/> <!-- lookup parent from repository --> </parent>
Mybatis版本如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
Mybatis的使用效果
先来看一下引入Mybatis的效果,studentDAO实际上是一个MapperProxy对象
通过debug进去之后,可以看到sqlSession的执行:
这一切是如何发生的呢?那就得从mybatis-spring-boot-starter
的spring.factories
文件说起了。
可以看到Mybatis的自动化配置类是MybatisAutoConfiguration
。
源码解析
关键类的定义
MybatisAutoConfiguration
类中声明SqlSessionFactory
和SqlSessionTemplate
为bean
此类中的静态内部类MapperScannerRegistrarNotFoundConfiguration
引入静态内部类AutoConfiguredMapperScannerRegistrar
;
AutoConfiguredMapperScannerRegistrar
实现了ImportBeanDefinitionRegistrar
接口的 registerBeanDefinitions
方法,扫描所有Mapper
将所有Mapper
的beanDefinition
标记为MapperFactoryBean
类型的,依赖注入方式为AUTOWIRE_BY_TYPE
。
MapperFactoryBean
实现了FactoryBean#getObject()
方法,这样当创建mapper对象时(如studentDAO
)就会通过getObject()
方法来创建bean
factoryBean初始化
将factoryBean包装后缓存
容器的refresh()
方法里的invokeBeanFactoryPostProcessors
中,一层层下去...最后放在factoryBeanInstanceCache
里
获取bean
填充属性
通过factoryBean的getObject()
方法获取代理对象:
MapperProxyFactory
代码如下:
这篇关于Mybatis源码解析-MapperProxy的创建的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南