我有一个依赖于Repository 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
?
答案 0 :(得分:3)
我在这里有一个简单的解决方案,请查看
@Primary
我假设您使用的是注释驱动方法:
@Primary
@Repository(value = "jdbcRepo")
public class JdbcRepo implements Repo{
}
@Primary
表示应该优先考虑bean 多名候选人有资格自动装备单值 依赖。如果候选人中只存在一个'主'豆, 它将是自动装配的价值。
@Repository(value = "hibernateRepo")
public class HibernateRepo implements Repo {
}
要注入相关性,您可以将@Autowired
与@Qualifier
一起使用,或仅使用@Resource
。
现在要注入
JdbcRepo
,你可以使用@Autowired
,因为@Primary
:
@Service
public class SomeService{
@Autowired
private Repo repoClass;
}
要注入
HibernateRepo
,您必须使用@Qualifier
@Service
public class RandomService{
@Autowired
@Qualifier("hibernateRepo")
private Repo repoClass;
}
为了您的关注
two beans of SomeService which one is injected with JdbcRepo and another is injected with HibernateRepo
,您可以关注 与您的服务类相同的模式 库中。
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;
}
使用SomeService
:
jdbcRepo
@Autowired
private SomeService someService;
使用SomeService
HibernateRepo
@Autowired
@Qualifier("hibernateService")
private SomeService someService;
请参考这些Stackoverflow线程以获取进一步的参考:
我希望这可以帮到你,随意发表评论!
答案 1 :(得分:1)
在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>
答案 2 :(得分:0)
如果您使用的是注释驱动,只需使用此
即可@Autowired private JdbcRepo jdbcRepo;
@Autowired private HibernateRepo hibernateRepo ;