MapperScannerConfigurer 實現 BeanDefinitionRegistryPostProcessor,在 BeanFactory 初始化前向容器註冊額外 BeanDefinition。
postProcessBeanDefinitionRegistry 創建 ClassPathMapperScanner(繼承 Spring 的 ClassPathBeanDefinitionScanner)。basePackage、annotationClass、markerInterface、sqlSessionFactory 等。scanner.scan(...) → 父類 doScan 掃描類並生成 BeanDefinition。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 管理。