创建两个相同的bean依赖项不同

时间:2015-11-27 06:27:16

标签: java spring spring-mvc dependency-injection

我有一个依赖于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

3 个答案:

答案 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 ;