我試圖在我的自定義實現(UserRepositoryExtensionImpl
)中獲取對我的存儲庫接口(UserRepository
)的引用,以便訪問Spring JPA提供的所有方法。CrudRepository在我的自定義存儲庫實現中
界面污物擴展:
@Repository
public interface UserRepository extends CrudRepository<User, String>, UserRepositoryExtension<RosterUser> {
...any custom spring JPA methods...
}
擴展接口:
@Repository
public interface UserRepositoryExtension <T> {
public T put(T entity);
}
定製實施:
public class UserRepositoryExtensionImpl implements UserRepositoryExtension<User> {
UserRepository userRepository;
@Autowired
public UserRepositoryExtensionImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public User put(User user) {
System.out.println(user + "was put");
// ...put logic here
return null;
}...
}
但是,我無法注入UserRepository
由於循環依賴存在(因爲UserRepository
擴展了實現的接口我的UserRepositoryImpl
)。我收到以下錯誤:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ' userRepositoryImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
一種可能,但不太理想的解決辦法是注入和EntityManager
爲UserRepositoryImp
,但在這種情況下,我沒有任何的所提供的春天JPA方法訪問CrudRepository
或我可能在UserRepository中創建的任何其他方法。
有關如何解決此問題的任何建議?
任何幫助將不勝感激。
編輯:正如@雪萊的答覆中提到,我能夠通過使3次修改解決這個問題:
- 卸下
@Repository
從UserRepositoryExtensionImpl
- 重命名
UserRepositoryExtensionImpl
到UserRepositoryImpl
。顯然這讓Spring意識到了實現的存在。見Spring Doc - 刪除我的構造函數和移動
@Autowired
到userRepository
場
的成功!
如果沒有任何實際的循環依賴關係(即:春只是感到困惑,因爲它認爲你有相似類型的許多豆)。添加額外的限定符,比如bean id,以便Spring知道自動裝配哪個bean。 – gerrytan 2013-02-28 00:27:42
給我們你的春天應用程序上下文 – Elbek 2013-02-28 03:49:51
@gerrytan - 我可能是錯的,但我不認爲這是一個循環依賴。 FYI:同樣的問題被提到[這裏](http://forum.springsource.org/showthread.php?132889-Spring-Data-Calling-default-CRUD-methods-inside-a-custom-repository-implementation&p= 439701#post439701) – 2013-02-28 16:41:59