Java 创建两个依赖关系不同的相同bean
我有一个依赖于存储库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
@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 ;