Java 如何使用Spring Boot指定Beannaming策略?
在使用Spring Boot配置应用程序时,我想指定一个自定义Java 如何使用Spring Boot指定Beannaming策略?,java,spring,spring-boot,Java,Spring,Spring Boot,在使用Spring Boot配置应用程序时,我想指定一个自定义BeanNamingStrategy。默认情况下,Spring Boot使用MethodNameStrategy,这是一种BeanNamingStrategy 我之所以要这样做,是因为我有抽象的父类,我的使用者将创建这些父类的配置子类。父类中的方法彼此具有相同的名称,因此没有针对子类的不同实现进行注册。我的自定义BeanNamingStrategy将把配置类的简单名称附加到某些bean名称上 通常在Spring应用程序中,您可以使用A
BeanNamingStrategy
。默认情况下,Spring Boot使用MethodNameStrategy
,这是一种BeanNamingStrategy
我之所以要这样做,是因为我有抽象的父类,我的使用者将创建这些父类的配置子类。父类中的方法彼此具有相同的名称,因此没有针对子类的不同实现进行注册。我的自定义BeanNamingStrategy
将把配置类的简单名称附加到某些bean名称上
通常在Spring应用程序中,您可以使用
ApplicationContext
的setBeanNamingStrategy
方法传递自定义BeanNamingStrategy
。但是,如果Spring Boot正在创建ApplicationContext
,我该怎么做呢?SpringApplicationBuilder有一个方法可以让您传入自定义生成器
有关如何使用fluent API的信息,请参见Spring引导参考中的
不幸的是,这对您没有帮助,因为这只适用于
@Component
样式的类注释,而不适用于@Bean
方法,因为名称使用这些方法。您还可以在主Spring Boot应用程序类上使用@ComponentScan(nameGenerator=…)
注释:
@SpringBootApplication
@ComponentScan(nameGenerator = FullyQualifiedAnnotationBeanNameGenerator.class)
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
谢谢,但是
@Bean
注释的方法(在@Configuration
-注释的类中)似乎没有调用@BeanNameGenerator
,仅用于@组件
-注释的类和@Configuration
-注释的类本身。是否调用了一个不同的对象来为用@bean
注释的方法生成bean名称?@Kidburla这很奇怪,因为负责评估@Configuration
类的对象清楚地知道BeanNameGenerator
:您链接的javadoc明确声明请注意,此策略不适用于Bean
方法“。我的理解是,BeanNamingStrategy
用于Bean
方法,beannamagenerator
仅用于从类级别的注释解析Bean。从Bean
方法确定Bean名称的策略现在是硬编码的:-(不确定是否有任何方法可以覆盖此功能:@Kidburla在我看来像是您应该请求的功能注意:使用此方法时,您可能会遇到问题w/@springbootest
和@WebMvcTest
。如果确实遇到问题,请参阅以获取帮助/更多详细信息。似乎更好的方法是使用@SpringBootAp。)直接应用程序(nameGenerator=…)
,完全避免了此问题。有关更多详细信息,请参阅。