Ja próbuje uzyskać odniesienie do mojego repozytorium interfejsu (UserRepository
), która rozciąga CrudRepository
w moim realizacji niestandardowych (UserRepositoryExtensionImpl
) w celu uzyskania dostępu do wszystkich metod przewidzianych przez wiosennej WZP.CrudRepository wewnątrz mojego niestandardowego wdrożenia repozytorium
Crud Rozszerzenie: Interfejs
@Repository
public interface UserRepository extends CrudRepository<User, String>, UserRepositoryExtension<RosterUser> {
...any custom spring JPA methods...
}
Rozszerzenie:
@Repository
public interface UserRepositoryExtension <T> {
public T put(T entity);
}
klienta Realizacja:
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;
}...
}
Jednak jestem w stanie wstrzyknąć UserRepository
od kołową zależność istnieje (biorąc pod uwagę, że UserRepository
rozszerza interfejs implementowany przez mój UserRepositoryImpl
). Ja otrzymuję następujący błąd:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ' userRepositoryImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
Możliwe, ale mniej niż idealnym rozwiązaniem byłoby, aby wstrzyknąć i EntityManager
do UserRepositoryImp
, ale w tym przypadku nie mam dostępu do żadnej z metod Wiosna WZP świadczonych przez CrudRepository
lub dodatkowe metody, które mogłem utworzyć w UserRepository.
Wszelkie sugestie, jak to obejść?
Każda pomoc zostanie bardzo doceniona.
EDIT: Jak wspomniano w odpowiedzi @ Shelley, udało mi się rozwiązać ten problem poprzez 3 zmiany:
- Wyjmowanie
@Repository
odUserRepositoryExtensionImpl
- zmiana nazwy
UserRepositoryExtensionImpl
doUserRepositoryImpl
. Wygląda na to, że Spring wie o istnieniu implementacji. Zobacz Spring Doc - Usunięcie mojego konstruktora i przesuwając
@Autowired
polauserRepository
sukces!
Jeśli nie ma żadnych rzeczywista zależność cykliczna (tj: Wiosna prostu się mylić, ponieważ uważa, że masz wiele ziaren o podobnym charakterze). Dodaj dodatkowy kwalifikator, taki jak identyfikator komponentu bean, aby Spring wiedział, która komponent bean będzie automatycznie programowany. – gerrytan
daj nam kontekst wiosennej aplikacji – Elbek
@gerrytan - Mogę się mylić, ale myślę, że istnieje zależność cykliczna. FYI: Ten sam problem jest przywoływany [tutaj] (http://forum.springsource.org/showthread.php?132889-Spring-Data-Calling-default-CRUD-metody-inside-i-standard-repository-implementation&p= 439701 # post439701) –