Die Entscheidung, welcher Proxy für eine Spring Data-Repository-Schnittstelle erstellt wurde, wird nur aufgrund Ihrer Konfigurationseinstellungen getroffen. Angenommen, Sie haben die folgende Konfiguration:
@Configuration
@EnableJpaRepositories("com.acme.foo")
@EnableMongoRepositories("com.acme.foo")
class Config { }
Das wird irgendwann explodieren wie die Interfaces im Paket com.acme.foo
werden beide von der MongoDB- und JPA-Infrastruktur erkannt. Um dies zu beheben, erlaubt Ihnen sowohl die JavaConfig- als auch die XML-Unterstützung, Einschluss- und Ausschlussfilter zu definieren, sodass Sie entweder Namenskonventionen, zusätzliche Anmerkungen oder ähnliches verwenden können:
@Configuration
@EnableJpaRepositories(basePackages = "com.acme.foo",
includeFilters = @Filter(JpaRepo.class))
@EnableMongoRepositories(base Packages = "com.acme.foo",
includeFilters = @Filter(MongoRepo.class))
class Config { }
In diesem Fall die beiden Annotationen @JpaRepo
und @MongoRepo
(von Ihnen zu erstellen) verwendet werden, um die Erkennung selektiv auszulösen, indem die relevanten Repository-Schnittstellen mit ihnen kommentiert werden.
Eine wirkliche automatische Erkennung ist so gut wie unmöglich, da es schwierig ist, allein anhand der Deklaration der Repository-Schnittstelle zu sagen, auf welchen Store Sie abzielen, und zu dem Zeitpunkt, an dem die Bean-Definitionen erstellt werden, wissen wir nicht einmal über eine weitere Infrastruktur (eine EntityManager
o.ä.) noch.