Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Spring Boot指定Beannaming策略?_Java_Spring_Spring Boot - Fatal编程技术网

Java 如何使用Spring Boot指定Beannaming策略?

Java 如何使用Spring Boot指定Beannaming策略?,java,spring,spring-boot,Java,Spring,Spring Boot,在使用Spring Boot配置应用程序时,我想指定一个自定义BeanNamingStrategy。默认情况下,Spring Boot使用MethodNameStrategy,这是一种BeanNamingStrategy 我之所以要这样做,是因为我有抽象的父类,我的使用者将创建这些父类的配置子类。父类中的方法彼此具有相同的名称,因此没有针对子类的不同实现进行注册。我的自定义BeanNamingStrategy将把配置类的简单名称附加到某些bean名称上 通常在Spring应用程序中,您可以使用A

在使用Spring Boot配置应用程序时,我想指定一个自定义
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=…)
,完全避免了此问题。有关更多详细信息,请参阅。