首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

MyBatis MapperScannerConfigurer 自動掃描機制源碼分析

     編輯:關於C++

核心類繼承體系

MapperScannerConfigurer 實現 BeanDefinitionRegistryPostProcessor,在 BeanFactory 初始化前向容器註冊額外 BeanDefinition。

關鍵流程

  1. postProcessBeanDefinitionRegistry 創建 ClassPathMapperScanner(繼承 Spring 的 ClassPathBeanDefinitionScanner)。
  2. 配置掃描器屬性:basePackage、annotationClass、markerInterface、sqlSessionFactory 等。
  3. 調用 scanner.scan(...) → 父類 doScan 掃描類並生成 BeanDefinition。
  4. 子類 doScan 覆蓋:將掃描到的 Mapper 接口 BeanDefinition 轉換為 MapperFactoryBean,注入 mapperInterface、sqlSessionFactory 等屬性,設置自動裝配模式。

關鍵轉換邏輯

GenericBeanDefinition def = (GenericBeanDefinition) holder.getBeanDefinition();
def.getPropertyValues().add("mapperInterface", def.getBeanClassName());
def.setBeanClass(MapperFactoryBean.class);
// 注入 sqlSessionFactory 或 sqlSessionTemplate
if (!explicitFactoryUsed) def.setAutowireMode(AUTOWIRE_BY_TYPE);

這樣原本 @Mapper 接口變為 MapperFactoryBean 實例,由 MyBatis-Spring 管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved