mybatis整合spring原理流程
2020-06-01 18:04:16 0 举报
mybatis整合spring原理流程
作者其他创作
大纲/内容
initMessageSource();初始国际化
bean实例化
postProcessBeanFactory(beanFactory);多用于子类扩展
入口@MapperScan注解入口还可以是xml中的配置入口还可以是spring boot的spring.factories方式自动装配
bean定义已经是一个工厂bean,所以真正的实例化对象是通过getObject方法实现的他最终根据解析a.b.CMapper注解和对应xml文件内容,实现的是一个a.b.CMapper类型的代理对象
this.prepareBeanFactory(beanFactory);设置工厂的标准上下文特征(设置加载器,设置表达式解析器,设置不能被直接依赖注入的接口)
finishRefresh();完成刷新,通常用来配置后台程序,在启动后一直运行
registerListeners();注册监听器 ,并绑定到广播器
this.prepareRefresh() 记录启动时间,激活标识,系统变量必要性校验,建立早期事件容器
onRefresh();用于扩展,官方解释是在特定的上下文中初始化特别的beansspring boot中在此处启动内置的tomcat
spring容器初始化过程中的mybatis整合过程
registerBeanPostProcessors(beanFactory);从名称可以看出是用来注册BeanPostProcessor的
MapperScan(扫描;路径)注解内通过@Import方式引入MapperScannerRegistrar implements ImportBeanDefinitionRegistrar来注册MapperScannerConfigurer的BeanDefinition,MapperScannerConfigurer实现了 BeanDefinitionRegistryPostProcessor的功能是在所有的BeanDefinition注册完毕后,可以去额外注册其他BeanDefinition
在这一步,同时做了两件事:1.执行所有的ImportBeanDefinitionRegistrar的注册bean定义的方法,所以MapperScannerConfigurer的bean定义被注册进去了2.执行所有的BeanDefinitionRegistryPostProcessor后置处理器(MapperScannerConfigure就是),所以他就把指定目录的mapper的代理类的bean定义注册进去了3.注册进去的bean定义(比如是a.b.CMapper)又会被改写: 一.将BeanClass改为MapperFactoryBean.class(是个FactoryBean) 二.将\"a.b.CMapper\"最为构造方法参数(这样实例化时就会调用MapperFactoryBean有参构造器) 三.将该bean的属性自动装配模式改为按类型(默认的需要属性上加@Autowired才可依赖注入), 改了之后只要属类型匹配就能注入,就是为了注入sqlSession。至此完成了mapper的bean定义的注入
整合原理视频:https://www.bilibili.com/video/BV1QE411N7kP?p=34
0 条评论
下一页