gpt4 book ai didi

java - Spring——只允许覆盖那个特定的bean

转载 作者:行者123 更新时间:2023-12-01 19:39:02 25 4
gpt4 key购买 nike

因此,我需要重写依赖项提供的 bean,以便自定义某些配置。

有什么方法可以只允许覆盖该特定名称吗?

我不想设置

spring.main.allow-bean-definition-overriding=true

这太可怕了。我只想重写一个特定的命名 bean,并禁止在所有其他实例中重写。

** 编辑 **

    @Bean
@Primary
fun vaadinAuthenticationSuccessHandler(
httpService: HttpService,
vaadinRedirectStrategy: VaadinRedirectStrategy
): VaadinAuthenticationSuccessHandler {
return VaadinUrlAuthenticationSuccessHandler(httpService, vaadinRedirectStrategy, "/")
}

结果

The bean 'vaadinAuthenticationSuccessHandler', defined in class path resource [n/c/s/config/security/VaadinAwareSecurityConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/vaadin/spring/security/config/VaadinSharedSecurityConfiguration.class] and overriding is disabled.

值得注意的是,我见过的类似代码实际上使用了

@Bean(name = VaadinSharedSecurityConfiguration.VAADIN_AUTHENTICATION_SUCCESS_HANDLER_BEAN)

(这没有什么区别,但仍然值得注意)

最佳答案

在您的一个 @Configuration 类中,您可以声明一个 @Bean ,其类与来自依赖库的类相同,并将其标记为 @Primary 覆盖 bean。

@Configuration
public class MyConfiguration {
@Bean
@Primary
public BeanClassFromDependency mrBean() {
return new YourOwnImplementationForBeanClassFromDependency();
}
}

随后,您可以像平常一样 Autowiring 。

@Autowired
private BeanClassFromDependency theBeanThatGotAway;

关于java - Spring——只允许覆盖那个特定的bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56053378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com