gpt4 book ai didi

java - Spring - 安全配置中定义的 Bean 创建顺序

转载 作者:行者123 更新时间:2023-12-02 09:38:21 25 4
gpt4 key购买 nike

在 Spring-Boot 和 Spring-Security 应用程序中,我有两个安全配置。所以两个用 @Configuration 注释的类和@EnableWebSecurity 并扩展 WebSecurityConfigurerAdapter

在配置一中,我们将其称为 foo,我创建了两个 bean(用 @Bean 注释)。两个 bean 都是 AuthenticationProvider 的。其中之一标有 @Primary@ConditionalOnProperty。如果出于测试目的设置了某些属性,它会替换其他身份验证提供程序。

在另一个配置中,我们称之为“bar”,我通过具有 AuthenticationProvider 类型的 @Autowired 注解字段来请求这些 AuthenticationProvider 之一。

我用 @Order(1) 注释了 foo-Configuration 以指示它应该首先运行。 bar-Configuration 有 @Order(2)。但是,应用程序无法以这种方式启动。 Spring 告诉我它无法创建 bar-configuration,因为请求的 AuthenticationProvider-bean 仍在创建中。这让我很困惑。我认为 foo-Configuration 应该已经创建了,因为它具有更高的订单优先级?为什么bean仍然不可用?

如果我用 @DependsOn("fooConfiguration") 注释 bar-Configuration ,那么它就可以工作。但我真的不明白为什么。另外:@DependsOn的使用是否有代码味道,我正在做的事情是否非正统(将一种配置的bean注入(inject)到另一种配置中)?

最佳答案

@Order(...) 注释放在生成bean 的方法上(在@Bean 注释旁边)。确保它们都具有相同的接口(interface)作为返回类型

除了提供精确的 int 值,您还可以使用 Ordered界面

关于java - Spring - 安全配置中定义的 Bean 创建顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57317104/

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