繁体   English   中英

Spring Bean /存储库的ID

[英]Id for Spring Bean/Repository

我有一个存储库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之类的东西

提前致谢

  1. 是的,在子类中覆盖注解@Repository吗?

您应该考虑以下几点:

一种。 如果打算将RepositoryA用作存储库,则两者都需要@Repository

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

C。 或者,您可以使用“ 组成继承 ”原则。 简而言之,您可以将RepositoryA注入RepositoryB并创建Facade或wrapper方法来访问RepositoryB实例上的方法。

  1. 我可以给子类分配一个新的标识符吗? 而不是使用@Qualifier注释,而是@Id或@Name之类的东西

我认为您的意思是javax.inject.Named中的@Named ,基本上等同于@Qualifier

我认为您的意思是<bean id='...' ,在这种情况下,@ @Qualifier是使用批注的方式。 请参阅spring的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM