Die Annotation wird verwendet, um die Erstellung von Repository-Proxies für Schnittstellen zu vermeiden, die tatsächlich den Kriterien einer Repo-Schnittstelle entsprechen, aber nicht dazu gedacht sind. Es ist nur erforderlich, wenn Sie beginnen, alle Repositories mit Funktionen zu erweitern. Lassen Sie mich Ihnen ein Beispiel geben:
Angenommen, Sie möchten eine Methode foo() zu allen Ihren Repositories hinzufügen. Sie würden mit dem Hinzufügen einer Repo-Schnittstelle wie folgt beginnen
public interface com.foobar.MyBaseInterface<…,…> extends CrudRepository<…,…> {
void foo();
}
Sie würden auch die entsprechende Implementierungsklasse, Fabrik und so weiter hinzufügen. Sie konkrete Repository-Schnittstellen würde erweitern nun diese Zwischen Schnittstelle:
public interface com.foobar.CustomerRepository extends MyBaseInterface<Customer, Long> {
}
nun annehmen, dass Sie Bootstrap - sagen wir mal Spring Data JPA - wie folgt:
<jpa:repositories base-package="com.foobar" />
Sie com.foobar
verwenden, da Sie CustomerRepository
im gleichen Paket haben . Die Spring Data-Infrastruktur kann nun nicht feststellen, dass MyBaseRepository
keine konkrete Repository-Schnittstelle ist, sondern als Zwischenrepo fungiert, um die zusätzliche Methode verfügbar zu machen. So würde es versuchen, eine Repository-Proxy-Instanz für sie zu erstellen und fehlschlagen. Sie können jetzt @NoRepositoryBean
verwenden, um diese Zwischenschnittstelle mit Anmerkungen zu versehen, damit Spring Data im Wesentlichen informiert wird: Erstellen Sie keine Repository-Proxy-Bean für diese Schnittstelle.
Dieses Szenario ist auch der Grund, warum CrudRepository
und PagingAndSortingRepository
diese Annotation auch tragen. Wenn der Paket-Scan diese versehentlich auffängt (weil Sie es versehentlich so konfiguriert haben), würde der Bootstrap fehlschlagen.
Kurz gesagt: Verwenden Sie die Annotation, um zu verhindern, dass Repository-Schnittstellen als Kandidaten ausgewählt werden, um schließlich als Repository-Bean-Instanzen zu enden.
Danke für diese detaillierte Erklärung Oliver. – balteo
Super Antwort. Danke. – ozgur
Schön erklärte Antwort. – Mukti