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.
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.
Tags und Links java jpa spring-data-jpa spring spring-data