Spring Bean / Repository的ID

时间:2017-07-04 02:01:13

标签: java spring hibernate java-ee spring-data-jpa

我有一个存储库B,我从另一个存储库A扩展。

存储库A:

@Repository
public class RepositoryA implements Repository {

}

存储库B:

@Repository
public class RepositoryB extends  RepositoryA implements RepositoryAux{
}

但是当我尝试注入存储库时,我遇到以下错误:

  

没有定义[Repository]类型的唯一bean:期望的单个匹配bean但找到2:[RepositoryA,RepositoryB]

我知道我可以使用注释@Qualifier来解决它。但是,我的问题是:

  1. 它是否正确覆盖子类中的注释@Repository?

  2. 我可以为子类分配新的标识符吗?而不是使用注释@Qualifier,像@Id或@Name

  3. 提前感谢

1 个答案:

答案 0 :(得分:3)

  
      
  1. 它正确覆盖子类中的注释@Repository?
  2.   

您应该考虑以下几点:

一个。如果您打算使用@Repository作为存储库,那么两者都需要RepositoryA

湾如果您打算仅使用RepositoryB来提供基本功能,以便RepositoryA(或其他类)可以对其进行扩展,那么请NoRepositoryBean使用RepositoryA进行抽象和注释

℃。或者,您可以使用" 组合而不是继承"原理。简而言之,您可以将RepositoryB注入RepositoryB并创建外观或包装器方法来访问@Named实例上的方法。

  
      
  1. 我可以为子类分配新的标识符吗?而不是使用注释@Qualifier,像@Id或@Name
  2. 这样的东西   

我认为你的意思是来自javax.inject.Named的{​​{1}},这基本等同于@Qualifier

我认为你的意思是<bean id='...',在这种情况下@Qualifier是注释的方式。见spring's documentation