mapper注入spring的实现过程

  1. 定位
    注解方式 根据MapperScan里的内容找到basePackages
  2. 加载
    MapperScannerRegistrar里registerBeanDefinitions方法通过ClassPathMapperScanner的doScan方法进行扫描basePackages。ClassPathMapperScanner继承spring中ClassPathBeanDefinitionScanner,通过调用ClassPathBeanDefinitionScanner中doScan获得BeanDefinitionHolder,获取BeanDefinitionHolder之后通过processBeanDefinitions方法来把BeanDefinition对应的beanClass修改为MapperFactoryBean的beanclass
  3. 注入
    在注入mapper形成的bean中会根据MapperFactoryBean中的getObject获取对应的bean变量。
    MapperFactoryBean.getObject会调用SqlSessionTemplate的getMapper方法获取mapper对象
    SqlSessionTemplate调用Configuration.getMapper 获取对象
    Configuration调用 MapperRegistry.getMapper方法
    MapperRegistry根据mapperProxyFactory来生成对mappper的代理对象,该代理对象内部拥有mapperInterface以及SqlSessionTemplate 对象

你可能感兴趣的:(mybatis)