Spring & mybatis - 823126028/book_reader GitHub Wiki
XML Mybatis 配置:
- DataSource 初始化。
- SpringSessionFactoryBean 初始化,读取mybatis xml 文件,生成mapperFactoryBean。
- MapperScan 类 读取指定包下面的mapper类,根据动态代理生成指定的mapper。实际调用的sqlSession invoke的代码。
- 调用sql的method的key,其实是由namespace加action id组成的,所以namespace 要设置成mapper的key。
spring 容器原理。
IOC & AOP
-
如果是 XmlClassPath 获取 xml里定义的bean。
-
主要流程在 refresh:
- 2.1 invokeBeanFactroyPostProcessor 调用 各个processor 处理。
- 2.1.1 org.springframework.context.annotation.ConfigurationClassPostProcessor 处理进行注解扫包(Component, Service)。
- 2.1.2 org.mybatis.spring.mapper.MapperScannerConfigurer 进行扫描 mybatis 包。
- 2.1.3 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 读取配置文件properties的。
- 2.1.4 org.springframework.beans.factory.config.CustomEditorConfigurer 自定义类型转换, autowired的时候可以转换。
- 2.1 invokeBeanFactroyPostProcessor 调用 各个processor 处理。
-
实例化所有的BeanDefinetionMap里的实例。
- 3.1. PostBeanProcessor before instante:首先看下该实例是否有aop的切面。( 第一次调用初始化其中的所有切面,通过扫描aop ),如果有aop切面,生成instance。
- 3.2. 调用各种aware 操作。
- 3.3 调用 postConstruct。
- 3.4 apply properties: 调用 beanPostProcessor,扫描autowired等,调用getBean,根据上面的customEditor替换bean,如果还没有生成 获取getEarlyRefrence()。
- 3.5 执行 afterProperties()
AOP
- autoProxyCreator 生成默认的proxy。
- ByNameProxyCreator 生成proxy
Bean和Required
- 利用@Bean 和 @Autowired(Required=false) 实现动态化。