java - 覆盖具有相同限定符名称的 spring beans
问题描述
我的 spring 应用程序中有 2 个配置类。
Configuration
和AnotherConfiguration
。仅当提供了某个参数(这AnotherConfiguration
由ConditionalOnClass
注释处理)时才创建 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;
}
}
用例是,如果我提供一个满足 Conditional 参数的参数AnotherConfiguration
,newStage2
则应该将其返回给所有期望testStage2
bean 的类。但是目前,testStage2
bean 是从Configuration
类中解析出来的,而不是被AnotherConfiguration
.
我已经尝试将@Primary
注释添加到定义中,AnotherConfiguration
但这只是解析newStage2
为所有期望 bean 类型的类,Stage
而与限定符无关。有没有办法指示 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;
}
}
推荐阅读
- asp.net-core - 将自定义身份验证方法添加到 IdentityServer4
- android - Android DiffUtil::onBindViewHolder 返回从列表中移除的位置
- java - 如何下载 azure 函数应用程序的代码
- java - 返回空数组
- sql - oracle LISTAGG 将多行结果分组为一行不起作用。ORA-00909
- isabelle - 用 Isabelle 表达参数缩写
- wso2 - WSO API 管理器 v3 - 在发布者中为 API 创建文档时出现错误消息
- c# - ASP.NET Core 3.1 WebRoot 路径
- c# - 如何制作高效的getter和setter方法
- c# - C#将类类型保存为预处理器