在 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 {