当前位置: 首页 > 知识库问答 >
问题:

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

谭景明
2023-03-14
@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 {
}

如何创建两个someServicebean,其中一个是用jdbcrepo注入的,另一个是用hibernateRepo注入的?

共有1个答案

弘浩瀚
2023-03-14

这里有一个简单的解决方案,请查看@primary

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

@Primary
@Repository(value = "jdbcRepo")
public class JdbcRepo implements Repo{
}

@primary指示当多个候选项有资格自动关联一个单值依赖项时,应该优先考虑一个bean。如果候选项中正好存在一个“主”bean,它将是autowired值。

@Repository(value = "hibernateRepo")
public class HibernateRepo implements Repo {
}
@Service
public class SomeService{
   @Autowired
   private Repo repoClass;
}  

要注入HibernateRePO,必须使用@qualifier

 @Service
    public class RandomService{
       @Autowired
       @Qualifier("hibernateRepo")
       private Repo repoClass;
    }  

对于您关心的两个服务bean,一个是用JdbcRepo注入的,另一个是用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;
}

jdbcrepo注入someService:

@Autowired
private SomeService someService;
@Autowired
@Qualifier("hibernateService")
private SomeService someService;

请进入这些Stackoverflow线程以进一步参考:

  • 实现相同接口的两个bean自动连接
  • 处理一个Spring bean/接口的多个实现

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

 类似资料:
  • 问题内容: 我正在为Java中的ERP系统进行定制。在我的定制中,我想使用Apache POI 3.10.1。因此,我集成了jars poi-3.10.1-20140818.jar和poi-ooxml-3.10.1-20140818.jar。 但是,这些jar包含几个类,这些类已经包含在ERP系统的核心代码中,但是有所不同。 如果核心ERP类覆盖POI类,则定制将引发运行时异常。如果POI类覆盖核

  • 我使用一个Android库,它要求我创建两个类,每个类继承自不同的类 (具有公共基类) 现在我有这个代码: 我必须复制这个类来创建一个扩展,即使我的两个类共享完全相同的代码。 我简化了示例的代码,但重复可能很重要 我决定将代码放在这两个类之外的静态方法中,并在类重写的方法中调用它们,但我认为必须有一种更干净的方法来做到这一点。 你能帮我解决这个问题吗? 和都继承自。

  • 问题内容: 对于不同的配置文件,maven pom.xml文件中是否可能具有一组不同的依赖关系? 例如 我想在一个配置文件中选择一个不同的依赖项jar文件,该文件具有相同的类名和相同接口的不同实现。 问题答案: 在此引用Maven文档: 配置文件元素既包含可选激活(配置文件触发器),又包含如果已激活POM则要对POM进行的一组更改。例如,为测试环境构建的项目可能指向与最终部署不同的数据库。或者可以

  • 问题内容: 我有一个使用测试范围的库L v1.0.0的项目A。项目A还依赖于项目B(具有范围编译),而B则可传递地依赖于库L v1.0.0(具有范围编译)。 为什么项目A的库L的最终范围是“测试”?它在运行时导致我NotClassDefFoundError。似乎库L上项目A的依赖项定义覆盖了L上的传递性依赖项。 怎么了 我的项目A仅将L用于单元测试,因此我定义了“测试”范围的依赖项。但是,最后,我

  • 我遇到了一个奇怪的问题,我的Maven文件中有两个依赖项,它们都定义了。我遇到的问题是,我的一个依赖项显然使用了代码所期望的不同版本,它会抛出and错误。 我的代码正在从Tika依赖项获取类,这导致了问题。我希望它来自我定义的,这是正确的版本。它似乎也忽略了文件中依赖项的排序。

  • 问题内容: 我刚刚遇到了一个案例,即我的Maven项目有两个直接依赖项,其中有两个不同版本的特定传递性依赖项。 在我的特殊情况下,我直接依赖以下内容: 和 这两个依赖项都对com.sun.jersey:jersey- core具有(较深)的传递性依赖关系,但是每个都有不同的版本。Maven并没有失败,甚至没有警告(或者,如果没有,我从来没有看到过!)正在发生这样的事情……因此,直到调试了球衣版本时