我有一个存储库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来解决它。但是,我的问题是:
它是否正确覆盖子类中的注释@Repository?
我可以为子类分配新的标识符吗?而不是使用注释@Qualifier,像@Id或@Name
提前感谢
答案 0 :(得分:3)
- 它正确覆盖子类中的注释@Repository?
醇>
您应该考虑以下几点:
一个。如果您打算使用@Repository
作为存储库,那么两者都需要RepositoryA
。
湾如果您打算仅使用RepositoryB
来提供基本功能,以便RepositoryA
(或其他类)可以对其进行扩展,那么请NoRepositoryBean
使用RepositoryA
进行抽象和注释
℃。或者,您可以使用" 组合而不是继承"原理。简而言之,您可以将RepositoryB
注入RepositoryB
并创建外观或包装器方法来访问@Named
实例上的方法。
- 我可以为子类分配新的标识符吗?而不是使用注释@Qualifier,像@Id或@Name
这样的东西 醇>
我认为你的意思是来自javax.inject.Named
的{{1}},这基本等同于@Qualifier
我认为你的意思是<bean id='...'
,在这种情况下@Qualifier
是注释的方式。见spring's documentation