簡體   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