繁体   English   中英

覆盖具有相同限定符名称的 spring bean

[英]Overriding spring beans with the same Qualifier Name

我的 spring 应用程序中有 2 个配置类。 ConfigurationAnotherConfiguration配置。 仅当提供了某个参数(这由ConditionalOnClass注释处理)时, AnotherConfiguration才会创建 bean。

配置.java

@Configuration 
public class Configuration {

@Bean
    public Stage testStage() {
          return someStage1;
    }

@Bean
    public Stage testStage2() {
          return someStage2;
    }

}

另一个配置.java

@Configuration
@ConditionalOnClass()
public class AnotherConfiguration {

@Bean
    public Stage testStage2() {
          return newStage2;
    }

}

用例是,如果我提供一个满足AnotherConfiguration的 Conditional 参数的参数,则newStage2应该返回给所有期望testStage2 bean 的类。 但目前, testStage2 bean 正在从Configuration class 解析,而不是被AnotherConfiguration覆盖。

我尝试将@Primary 注释添加到@Primary中的定义中,但这只是将AnotherConfiguration解析为所有需要Stage类型的bean 的类,而与限定符newStage2 有没有办法指示 spring 仅覆盖相同 QualifierName 的 bean 定义(此处testStage2

由于项目限制,我无法对Configuration.java进行更改,但可以对AnotherConfiguration.java进行任何更改,保持名称( testStage2() )相同。

我真的不推荐它但是

使用条件而不是 onClass 因为在没有参数的情况下总是如此

public class Cond implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return false;
    }
}

然后定义要加载到上下文中的重写 bean

@Component("testStage2")
@Conditional(value = Cond.class)
@Primary
public class AnotherStage extends Stage {
    public AnotherStage(){
        //do whatever
    }
}

抱歉豆风格

@Configuration
public class AnotherConfiguration {
    @Bean("testBean2")
    @Conditional(value = Cond.class)
    @Primary
    public Stage testStage2() {
      return newStage2;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM