Java Spring—在安全配置中定义的Bean创建顺序
在Spring引导和Spring安全应用程序中,我有两种安全配置。所以有两个类用Java Spring—在安全配置中定义的Bean创建顺序,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,在Spring引导和Spring安全应用程序中,我有两种安全配置。所以有两个类用@Configuration和 @EnableWebSecurity和扩展WebSecurityConfigurerAdapter 在配置一中,我们称之为foo,我创建了两个Bean(用@Bean注释)。这两个bean都是AuthenticationProvider的。其中一个标记为@Primary和@ConditionalOnProperty。如果出于测试目的设置了某些属性,它将替换其他身份验证提供程序 在另一种配
@Configuration
和
@EnableWebSecurity
和扩展WebSecurityConfigurerAdapter
在配置一中,我们称之为foo,我创建了两个Bean(用@Bean
注释)。这两个bean都是AuthenticationProvider的。其中一个标记为@Primary
和@ConditionalOnProperty
。如果出于测试目的设置了某些属性,它将替换其他身份验证提供程序
在另一种配置中,我们称之为bar,我通过使用AuthenticationProvider类型的@Autowired
注释字段来请求其中一个AuthenticationProvider
我已经用@Order(1)
注释了foo配置,以指示它应该首先运行。条形配置具有@Order(2)
。但是,应用程序不能以这种方式启动。Spring告诉我它无法创建bar配置,因为请求的AuthenticationProviderbean仍在创建中。这使我困惑。我认为应该已经创建了foo配置,因为它具有更高的优先级?为什么豆子还不可用
如果我用@DependsOn(“fooConfiguration”)
注释条配置,那么它就可以工作了。但我真的不明白为什么。另外:使用@DependsOn
代码是否有味道?我正在做的事情是否非正统(将一个配置的bean注入另一个配置)?将@Order(…)
注释置于生成bean的方法之上(在@bean
注释旁边)。确保它们都具有与返回类型相同的接口
除了提供精确的
int
值之外,您还可以使用interface不确定配置是否使用了@Order
。你看过@AutoConfigureBefore
和@AutoConfigureAfter
了吗?@Mike嘿,谢谢你的输入!我非常确定这个注释是用于配置的,我在互联网上读到的许多资源中都推荐使用它,我个人已经看到它在安全配置中起作用。如果您希望有多个配置需要以特殊顺序配置过滤器链,这一点至关重要。另外,我认为常规配置和spring所说的自动配置之间有区别,对吗?我不认为它用于类本身,而是如下面的答案所指出的单个bean。@EnabledAutoConfiguration
注释只是指示Spring尝试配置您需要的bean定义;据我所知,没有自动配置与常规配置之比。@Mike它肯定用于类本身,您可以在spring文档中找到这一点:(在6.10多HttpSecurity下)。但是看起来安全模块已经为这个注释开发了一些自定义逻辑,它只影响生成的过滤器链,并且在bean创建时不影响。但我找不到一个明确的说法,这似乎并不能解决问题。同样的异常也会发生。我认为这个配置有两个相同类型的bean这一事实与这个问题并不相关。我把它包括在内,因为这正是我正在处理的案件。我应该在发帖之前检查一下——我的错。抱歉搞混了!