首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以创建多个具有相同名称的spring bean(来自不同的接口)?

是否可以创建多个具有相同名称的spring bean(来自不同的接口)?
EN

Stack Overflow用户
提问于 2020-03-24 15:57:48
回答 1查看 51关注 0票数 0

我正在尝试创建以下结构:

代码语言:javascript
复制
public interface A {string calculateA(){....}}

@Service("policy1")
public class APolicy1 implements A {
  @Override
  public String calculateA(){...}
}

@Service("policy2")
public class APolicy2 implements A {
  @Override
  public String calculateA(){...}
}

和另一个接口

代码语言:javascript
复制
 public interface B{string calculateB(){....}}

@Service("policy1")
public class BPolicy1 implements B{
  @Override
  public String calculateB(){...}
}

@Service("policy2")
public class BPolicy2 implements B{
  @Override
  public String calculateB(){...}
}

以及使用这些bean的类:

代码语言:javascript
复制
@service
@Primary
public class Arouter implements A{
   @Autowired
   Map<String, A> AServices;

   @Autowired
   PolicyResolver policyResolver;

   @Override
   public String calculateA(){
     String policy = policyResolver.getPolicy();
     AServices.get(policy).CalculateA();
}

@service
@Primary
public class Brouter Implements B{
   @Autowired
   Map<String, B> AServices;

   @Autowired
   PolicyResolver policyResolver;

   @Override
   public String calculateB(){
     String policy = policyResolver.getPolicy();
     AServices.get(policy).CalculateB();
}

注意:这里的想法是通过某种策略将正确的业务逻辑委托给正确的业务逻辑。例如,如果我在策略A上下文中运行,并且需要触发服务B,则路由器将调用BPolicy2方法。

但是我得到了:

代码语言:javascript
复制
org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'policy1' for bean class [...apackage.APolicy1] conflicts with existing, non-compatible bean definition of same name and class [...bpackage.BPolicy1]

我希望因为它们是不同的bean类型,所以我可以给它们起相同的名字。

编辑:我有一个解决方案:将前缀添加到bean名称中,路由器会将前缀添加到policyResolver返回值中,但我认为这不那么优雅

EN

回答 1

Stack Overflow用户

发布于 2020-03-24 18:51:49

@限定符注释可用于区分不同的bean。

下面是一个带有@qualifier注释在Spring中使用的小示例的链接:

https://memorynotfound.com/handling-multiple-autowire-dependencies-with-spring-qualifier/

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60826942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档