L'annotazione viene utilizzata per evitare la creazione di proxy di repository per le interfacce che effettivamente corrispondono ai criteri di un'interfaccia di repository ma non sono intese per essere uno. È richiesto solo dopo aver iniziato ad estendere tutti i repository con funzionalità. Lasciatemi fare un esempio:
Si supponga di voler aggiungere un metodo foo() a tutti i repository. Si potrebbe iniziare con l'aggiunta di un'interfaccia di pronti contro termine come questo
public interface com.foobar.MyBaseInterface<…,…> extends CrudRepository<…,…> {
void foo();
}
Si potrebbe anche aggiungere il secondo classe di implementazione, fabbrica e così via. È interfacce repository di cemento sarebbe ora estendere tale interfaccia intermedia:
public interface com.foobar.CustomerRepository extends MyBaseInterface<Customer, Long> {
}
Ora assumere il bootstrap - diciamo primavera dati JPA - come segue:
<jpa:repositories base-package="com.foobar" />
È utilizzare com.foobar
perché avete CustomerRepository
nello stesso pacchetto . L'infrastruttura Spring Data ora non ha modo di dire che lo MyBaseRepository
non è un'interfaccia di repository concreta ma piuttosto funge da repo intermedio per esporre il metodo aggiuntivo. Così proverebbe a creare un'istanza proxy repository per esso e fallire. È ora possibile utilizzare @NoRepositoryBean
per annotare questa interfaccia intermedia in modo da dire essenzialmente a Spring Data: non creare un bean proxy repository per questa interfaccia.
Questo scenario è anche il motivo per cui CrudRepository
e PagingAndSortingRepository
portano anche questa annotazione. Se la scansione del pacchetto li prelevasse per sbaglio (perché l'hai accidentalmente configurato in questo modo) il bootstrap fallirebbe.
Per farla breve: utilizzare l'annotazione per impedire che le interfacce del repository vengano prelevate come candidati per finire come istanze di bean di repository.
fonte
2012-07-20 19:29:49
Grazie per questa spiegazione dettagliata Oliver. – balteo
Super risposta. Grazie. – ozgur
Risposta ben spiegata. – Mukti