我想在使用Spring Boot配置应用程序时指定自定义BeanNamingStrategy
。默认情况下,Spring Boot使用的MethodNameStrategy
是BeanNamingStrategy
。
我想这样做的原因是因为我有抽象的父类,我的消费者将创建它的配置子类。父类中的方法具有彼此相同的名称,因此不会为子类的不同实现进行注册。我的自定义BeanNamingStrategy
会将配置类的简单名称附加到某些bean名称。
通常在Spring应用程序中,您可以使用BeanNamingStrategy
的{{1}}方法传递自定义setBeanNamingStrategy
。但是,如果Spring Boot正在创建ApplicationContext
,我该怎么做?
答案 0 :(得分:6)
SpringApplicationBuilder有一个方法beanNameGenerator()
,可让您传入自定义生成器。
请参阅Spring Boot参考中的22.3 Fluent builder API,了解如何使用流畅的API。
不幸的是,这对您没有帮助,因为这仅适用于@Component
- 样式类注释,而不适用于@Bean
方法,其名称are hard coded使用this method
答案 1 :(得分:1)
您还可以在主 Spring Boot 应用程序类上使用 @ComponentScan(nameGenerator = ...)
批注:
@SpringBootApplication
@ComponentScan(nameGenerator = FullyQualifiedAnnotationBeanNameGenerator.class)
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}