Java 创建两个依赖关系不同的相同bean

Java 创建两个依赖关系不同的相同bean,java,spring,spring-mvc,dependency-injection,Java,Spring,Spring Mvc,Dependency Injection,我有一个依赖于存储库Bean的服务类 @Service public class SomeService{ private Repo repoClass; @Autowired public SomeService(Repo repoClass){ this.repoClass = repoClass; } //Methods } 然而,我有两种回购 public class JdbcRepo implements Repo{ } public cl

我有一个依赖于存储库Bean的服务类

@Service
public class SomeService{
   private Repo repoClass;
   @Autowired
   public SomeService(Repo repoClass){
      this.repoClass = repoClass;
   }
   //Methods
}
然而,我有两种回购

public class JdbcRepo implements Repo{
}

public class HibernateRepo implements Repo {
}

如何创建
SomeService
的两个bean,其中一个注入了
JdbcRepo
,另一个注入了
HibernateRepo

用xml定义两个
SomeService
bean,如下所示

<bean id="someservice" class="">
     <constructor-arg>
         <value>JdbcRepo</value>
     </constructor-arg>
</bean>

<bean id="someservice2" class="">
     <constructor-arg>
         <value>HibernateRepo</value>
     </constructor-arg>
</bean>

JdbcRepo
冬眠
我这里有一个简单的解决方案,请研究一下

我假设您正在使用注释驱动的方法:

@Primary
@Repository(value = "jdbcRepo")
public class JdbcRepo implements Repo{
}
@Primary
表示当 多个候选对象有资格自动关联单个值 附属国。如果候选人中只存在一个“主要”bean, 它将是自动连接的值

要插入依赖项,可以将
@Autowired
@限定符一起使用,也可以仅使用
@Resource

现在要注入
JdbcRepo
,您只需使用
@Autowired
,因为
@Primary

要注入
hibernatePO
,必须使用
@限定符


对于您所关心的
某个服务的两个bean,一个注入了JdbcRepo,另一个注入了HibernateRepo
,您可以遵循 服务类的模式与您的 存储库

要使用
jdbcRepo
注入
SomeService

@Autowired
private SomeService someService;
使用
hibernaterpo

@Autowired
@Qualifier("hibernateService")
private SomeService someService;
请考虑这些Stackoverflow线程以供进一步参考:


我希望这对你有帮助,请随意评论

如果您使用的是注释驱动,只需使用

@Autowired private JdbcRepo jdbcRepo; 
@Autowired private HibernateRepo hibernateRepo ;

所以最后我必须有两类
SomeService
?@iisc,这只是一个例子。重要的是注入回购的方式,而不是服务类。它可以是任何spring管理的bean,我的意思是,无论你想注射到哪里。无论如何,我已经重命名了服务类以避免混淆。如果您仍然有疑问,请告诉我。我主要关心的是有两个bean类型,但是每个bean都有不同的bean需要注入。请检查更新的答案,如果您需要进一步的帮助,请告诉我!
public interface SomeService{
}

@Primary
@Service(value = "jdbcService")
public class  JdbcService extends SomeService{
   @Autowired
   private Repo repo;
}

@Service(value = "hibernateService")
public class  HibernateService extends SomeService{
   @Autowired
   @Qualifier("hibernateRepo")
   private Repo repo;
}
@Autowired
private SomeService someService;
@Autowired
@Qualifier("hibernateService")
private SomeService someService;
@Autowired private JdbcRepo jdbcRepo; 
@Autowired private HibernateRepo hibernateRepo ;