Wie wird die Federdaten-Repository-Instanz für die angegebene Domänenklasse abgerufen?

8

Die Liste aller Spring Data Repositories in einer Klasse Bar :

%Vor%

Wie finde ich das Repository für eine vorhandene Domain-Klasse Foo in der obigen Liste?

Angenommen, dass Folgendes existiert:

%Vor%

und

%Vor%     
Udo 10.01.2013, 19:50
quelle

3 Antworten

18

Spring Data Commons enthält eine Klasse Repositories , die ein ListableBeanFactory benötigt, um alle darin definierten Repository-Beans zu finden, und stellt eine API bereit, um diese Instanzen nach Domänenklasse zu erhalten (durch ….getRepository(Class<?> type) ).

Diese Klasse sollte mit Vorsicht verwendet werden. Da für die Repository-Instanzen eine ernsthafte Proxy-Generierung stattfindet, müssen Sie sicherstellen, dass die Repositories -Instanz während der Erstellung von ApplicationContext so spät wie möglich erstellt wird. Der bevorzugte Weg besteht darin, ApplicationListener zu implementieren und die Instanz durch Anhören von ContextRefreshedEvent zu erstellen.

Wenn Sie eine Webanwendung schreiben, besteht der sicherste Weg, Repositories zu verwenden, indem Sie die Repositorys in der von ApplicationContext erstellten ContextLoaderListener bootstrappen und die Repositories platzieren (siehe Referenzdokumentation von Spring MVC für Details.

    
Oliver Gierke 13.01.2013 20:15
quelle
7
%Vor%     
Deepak 14.07.2015 10:37
quelle
2

Der Schlüssel zur Lösung ist Spring org.springframework.data.repository.core.support.DefaultRepositoryMetadata , die die Methode getDomainType() bereitstellt.

DefaultRepositoryMetadata benötigt die Repository-Schnittstelle als Konstruktor arg. So kann man alle vorhandenen Repositories durchlaufen, die Repository-Schnittstelle abrufen (was immer noch ein heikler Teil ist, weil die Repository-Instanz mehr als eine Schnittstelle hat) und diejenige finden, bei der getDomainType() gleich Foo.class ist.

    
Udo 11.01.2013 10:58
quelle