在 Spring 中使用基于 Java 的配置时,配置 Mybatis 的 mapperScannerConfigurer
如
@Bean
MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.example.dao");
return mapperScannerConfigurer;
}
项目启动时出现警告
Cannot enhance @Configuration bean definition 'xxxx' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
I discovered that the MapperScannerConfigurer is a implementation of BeanFactoryPostProcessor. Having a BeanFactoryPostProcessor in a @Configuration class breaks the default post-processing of that @Configuration class.
大意是 MapperScannerConfigurer
是 BeanFactoryPostProcessor
的一个实现,如果配置类中出现 BeanFactoryPostProcessor
,会破坏默认的 post-processing
。
最简单的解决方式是使用 @MapperScan
注解代替 MapperScannerConfigurer
的 bean 配置。
如
@Configuration
@MapperScan(basePackages = "com.example.dao")
public class AppConfig {