Sto tentando di ottenere un riferimento alla mia interfaccia repository (UserRepository
) che si estende CrudRepository
nel mio implementazione personalizzata (UserRepositoryExtensionImpl
) al fine di ottenere l'accesso a tutti i metodi forniti da Spring JPA.CrudRepository dentro la mia implementazione repository personalizzati
Crud Extension: Interfaccia
@Repository
public interface UserRepository extends CrudRepository<User, String>, UserRepositoryExtension<RosterUser> {
...any custom spring JPA methods...
}
Estensione: Attuazione
@Repository
public interface UserRepositoryExtension <T> {
public T put(T entity);
}
personalizzata:
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;
}...
}
Tuttavia, sono in grado di iniettare UserRepository
poiché una dipendenza circolare esiste (dato che UserRepository
estende l'interfaccia implementata da il mio UserRepositoryImpl
). Sto ottenendo il seguente errore:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ' userRepositoryImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
Una possibile, ma meno di soluzione ideale sarebbe quella di iniettare e EntityManager
in UserRepositoryImp
, ma in quel caso, non ho accesso a uno dei metodi di Primavera JPA forniti da CrudRepository
o altri metodi aggiuntivi che potrei aver creato in UserRepository.
Qualche suggerimento su come aggirare questo?
Qualsiasi aiuto sarebbe molto apprezzato.
EDIT: Come indicato nella risposta @ di Shelley, sono stato in grado di risolvere questo facendo 3 modifiche:
- Rimozione del
@Repository
daUserRepositoryExtensionImpl
- Rinominare
UserRepositoryExtensionImpl
aUserRepositoryImpl
. Apparentemente questo rende la primavera consapevole dell'esistenza dell'implementazione. Vedere Spring Doc - Rimozione mio costruttore e spostando il
@Autowired
aluserRepository
campo
SUCCESSO!
Se non c'è alcuna dipendenza effettiva circolare (es: Primavera appena si confondono perché pensa di avere molti chicchi di tipo simile). Aggiungi qualificatori aggiuntivi come ID bean in modo che Spring sappia quale bean da autowire. – gerrytan
dacci il tuo contesto di app di primavera – Elbek
@gerrytan - Potrei sbagliarmi, ma penso che ci sia una dipendenza circolare. A proposito: lo stesso problema viene riferito [qui] (http://forum.springsource.org/showthread.php?132889-Spring-Data-Calling-default-CRUD-methods-inside-a-custom-repository-implementation&p= 439701 # post439701) –