Spring & mybatis - 823126028/book_reader GitHub Wiki

XML Mybatis 配置:

  1. DataSource 初始化。
  2. SpringSessionFactoryBean 初始化,读取mybatis xml 文件,生成mapperFactoryBean。
  3. MapperScan 类 读取指定包下面的mapper类,根据动态代理生成指定的mapper。实际调用的sqlSession invoke的代码。
  4. 调用sql的method的key,其实是由namespace加action id组成的,所以namespace 要设置成mapper的key。

spring 容器原理。

IOC & AOP


  1. 如果是 XmlClassPath 获取 xml里定义的bean。

  2. 主要流程在 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的时候可以转换。
  3. 实例化所有的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

  1. autoProxyCreator 生成默认的proxy。
  2. ByNameProxyCreator 生成proxy

Bean和Required

  1. 利用@Bean 和 @Autowired(Required=false) 实现动态化。