Tôi đang cố gắng tham chiếu giao diện kho lưu trữ của mình (UserRepository
) mở rộng CrudRepository
trong triển khai tùy chỉnh của mình (UserRepositoryExtensionImpl
) để truy cập vào tất cả các phương pháp do Spring JPA cung cấp.CrudRepository bên trong triển khai kho lưu trữ tùy chỉnh của tôi
CRUD mở rộng: Giao diện
@Repository
public interface UserRepository extends CrudRepository<User, String>, UserRepositoryExtension<RosterUser> {
...any custom spring JPA methods...
}
Extension:
@Repository
public interface UserRepositoryExtension <T> {
public T put(T entity);
}
Tuỳ chỉnh thực hiện:
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;
}...
}
Tuy nhiên, tôi không thể tiêm UserRepository
kể từ khi một phụ thuộc chu trình tồn tại (cho rằng UserRepository
mở rộng giao diện được triển khai bởi của tôi UserRepositoryImpl
). Tôi nhận được lỗi sau:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ' userRepositoryImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
Một có thể, nhưng ít hơn giải pháp lý tưởng sẽ được tiêm và EntityManager
vào UserRepositoryImp
, nhưng trong trường hợp đó, tôi không có quyền truy cập vào bất kỳ phương pháp xuân JPA được cung cấp bởi CrudRepository
hoặc bất kỳ phương thức bổ sung nào mà tôi có thể đã tạo trong UserRepository.
Bất kỳ đề xuất nào về cách giải quyết vấn đề này?
Mọi trợ giúp sẽ được đánh giá cao.
EDIT: Như đã đề cập trong câu trả lời @ shelley, tôi đã có thể giải quyết việc này bằng cách làm cho 3 thay đổi:
- Loại bỏ các
@Repository
từUserRepositoryExtensionImpl
- Đổi tên
UserRepositoryExtensionImpl
đểUserRepositoryImpl
. Rõ ràng điều này làm cho Spring nhận thức được sự tồn tại của thực hiện. Xem Spring Doc - Loại bỏ constructor của tôi và di chuyển
@Autowired
đếnuserRepository
lĩnh vực
THÀNH CÔNG!
Nếu không có bất kỳ phụ thuộc chu trình thực tế (ví dụ: Mùa xuân chỉ bị lẫn lộn vì nó nghĩ rằng bạn có nhiều đậu các loại tương tự). Thêm bổ sung vòng loại như id đậu để Spring biết đậu nào để autowire. – gerrytan
cung cấp cho chúng tôi ngữ cảnh ứng dụng mùa xuân của bạn – Elbek
@gerrytan - Tôi có thể sai, nhưng tôi nghĩ rằng có sự phụ thuộc vòng tròn. FYI: Cùng một vấn đề đang được tham chiếu [ở đây] (http://forum.springsource.org/showthread.php?132889-Spring-Data-Calling-default-CRUD-methods-inside-a-custom-repository-implementation&p= 439701 # post439701) –