SpringのJPAが提供するすべてのメソッドにアクセスするために、カスタム実装(UserRepositoryExtensionImpl
)内でCrudRepository
を拡張するリポジトリインタフェース(UserRepository
)への参照を取得しようとしています。私のカスタムリポジトリの実装内のCrudRepository
CRUD拡張子:
@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
)。 UserRepositoryImp
に
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ' userRepositoryImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
可能、しかし、理想的なソリューションよりも少ないが、注入するだろうとEntityManager
が、その場合には、私はにより提供される春のJPAの方法のうちのいずれかへのアクセスを持っていない:私は次のエラーを取得していますCrudRepository
、または私がUserRepositoryで作成した可能性のある追加のメソッド。
これを回避する方法についてのご意見はありますか?
ご協力いただければ幸いです。
EDIT:UserRepositoryImpl
にUserRepositoryExtensionImpl
の名前を変更UserRepositoryExtensionImpl
@Repository
削除
- :@のシェリーの答えで述べたように、私は3つの変更を加えることによってこの問題を解決することができました。どうやらこれによりSpringは実装の存在を認識します。私のコンストラクタを削除し、
userRepository
フィールド
SUCCESSに@Autowired
を移動Spring Doc
実際の循環依存関係がない場合(つまり:それはあなたが同様のタイプの多くの豆を持っていると考えているので春はただ混乱)。 Bean IDのような追加の修飾子を追加すると、SpringはどのBeanをオートワイヤするか知っています。 – gerrytan
あなたの春のアプリのコンテキストを教えてください – Elbek
@gerrytan - 私は間違っている可能性がありますが、私は循環依存があると思います。 FYI:同じ問題が参照されています[ここ](http://forum.springsource.org/showthread.php?132889-Spring-Data-Calling-default-CRUD-methods-inside-a-custom-repository-implementation&p= 439701#post439701) –