java - 如何拆分Spring条件配置?

标签 java spring configuration conditional-statements

我的应用程序使用自己的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/

相关文章:

java - GWT - 树 - TreeItem 中仅粗体父项

java - Android GPU图像库

java - GWT RemoteServiceServlet 请求滞后;没有反应

spring - 使用带有 Spring Data 和绑定(bind)参数的 Postgres JSONB 查询失败并出现 InvalidDataAccessApiUsageException

spring - 使用异步 Controller 和长时间轮询时,Hibernate session 将获取过时的数据

java - IntelliJ在编译时找不到依赖项,但在编辑器中可以。

java - Spring Boot 管理客户端无法构建

java - Spring - 为什么不使用 log4j2 XML 配置文件?

java - "xmlns:log4j"是 <log4j :configuration> tag? 的必需属性吗

php - 无法在 IIS 上设置 upload_tmp_dir