Я пытаюсь получить ссылку на мой репозиторий интерфейса (UserRepository
), который расширяет CrudRepository
в моей пользовательской реализации (UserRepositoryExtensionImpl
) для того, чтобы получить доступ ко всем методам, предоставляемых Spring JPA.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
). Я получаю следующее сообщение об ошибке:
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
, но в этом случае, у меня нет доступа к какому-либо из методов Spring JPA, предоставляемых CrudRepository
или любые дополнительные методы, которые я мог бы создать в UserRepository.
Любые предложения о том, как обойти это?
Любая помощь была бы принята с благодарностью.
EDIT: Как было сказано в ответ @ Shelley, я был в состоянии решить эту проблему, сделав 3 изменения:
- Извлечение
@Repository
изUserRepositoryExtensionImpl
- Переименование
UserRepositoryExtensionImpl
кUserRepositoryImpl
. По-видимому, это заставляет Spring осознавать существование реализации. См Spring Doc - Удаление моего конструктора и перемещение
@Autowired
вuserRepository
поле
УСПЕХА!
Если нет какой-либо фактическая циклической зависимости (то есть: Spring просто запутаться, потому что думает, что у вас есть много бобов подобного типа). Добавьте дополнительный определитель, такой как bean id, поэтому Spring знает, какой bean-компонент для autowire. – 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) –