Mybaits 源码分析第二章

第一、spring 与mybaits整合

  • BeanDefinitionRegistryPostProcessor
  • InitializingBean
  • ApplicationContextAware
  • BeanNameAware
    BeanDefinitionRegistryPostProcessor 在bean初始化的时候调用
    InitializingBean 在创建的时候调用
    Aware 所有的Aware都跟spring容器相关

Mybatis源码分析

前言

分析mybatis源码之前。首先需要猜测mybaits是如何与spring整合。如何自动与读取xml问题,如何将mapper与xml做映射

  • 1、spring启动的时候会读取xml文件
  • 2、然后初始化mybaits文件
  • 3、使用动态代理建xml与mapper文件结合起来然后产生代理类对象

我们注意到这里有两三个与Mapper相关的配置:

  • SqlSessionFactory#mapperLocations,指定xml文件的配置路径
  • SqlSessionFactory#configLocation,指定mybaits的配置文件,该配置文件也可以配置mapper.xml的配置路径信息
  • apperScannerConfigurer,扫描Mapper的java类(DAO)
mybatis 架构图在这里插入图片描述

在这里插入图片描述

分析第一文件 spring 与mybaits整合 mybaits-spring

 public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
    if (this.processPropertyPlaceHolders) {
      this.processPropertyPlaceHolders();
    }
   // 定义ClassPathMapperScanner下面的路径
    ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
    scanner.setAddToConfig(this.addToConfig);
    scanner.setAnnotationClass(this.annotationClass);
    scanner.setMarkerInterface(this.markerInterface);
    // 在读取的时候自动赋值
    scanner.setSqlSessionFactory(this.sqlSessionFactory); 
    scanner.setSqlSessionTemplate(this.sqlSessionTemplate);
    scanner.setSqlSessionFactoryBeanName(this.sqlSessionFactoryBeanName);
    scanner.setSqlSessionTemplateBeanName(this.sqlSessionTemplateBeanName);
    scanner.setResourceLoader(this.applicationContext);
    scanner.setBeanNameGenerator(this.nameGenerator);
    scanner.registerFilters();
    scanner.scan(StringUtils.tokenizeToStringArray(this.basePackage, ",; \t\n"));
  }

org.springframework.context.annotation.ClassPathBeanDefinitionScanner#scan

public int scan(String... basePackages) { 
    int beanCountAtScanStart = this.registry.getBeanDefinitionCount();
    this.doScan(basePackages);
    if (this.includeAnnotationConfig) {
      AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
    }

    return this.registry.getBeanDefinitionCount() - beanCountAtScanStart;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值