我的应用程序使用自己的Spring配置Condition
根据设置提供bean,但由于数量的原因,我希望拆分长@Configuration
而不是添加 @Conditional
到数十个 bean。
目前,我的主要安全配置如下
@Configuration @EnableOAuth2Client @EnableWebSecurity
@Import(OptionalAuthenticationConfiguration.class)
public class WebshopSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired(required = false)
private OptionalAuthenticationConfiguration auth;
这是条件配置
@Configuration
@Conditional(MyCondition.class)
public class OptionalAuthenticationConfiguration {
[...]
由于可选配置上的 @Conditional
,@Import
注释失败并显示
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webshopSecurityConfig': Injection of autowired dependencies failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private OptionalAuthenticationConfiguration
WebshopSecurityConfig.auth; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [OptionalAuthenticationConfiguration] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
即使 bean 属性 WebshopSecurityConfig.auth
具有 required = false
。
Spring中有没有办法实现这种条件配置拆分?
最佳答案
使 OptionalAuthenticationConfiguration
成为具有两个实现的接口(interface)。
使用@Conditional(MyCondition.class)
的实际实现和使用@ConditionalOnMissingBean
的空实现。
这样,当 MyCondition
不允许创建配置时,它将被占位符空实现替换。
关于java - 如何拆分Spring条件配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49550882/