La decisione di archiviare un proxy creato per un'interfaccia del repository Spring Data viene presa solo a causa della configurazione della configurazione. Supponiamo di avere la seguente configurazione:
@Configuration
@EnableJpaRepositories("com.acme.foo")
@EnableMongoRepositories("com.acme.foo")
class Config { }
Questo ad un certo punto esploderà quando le interfacce nel pacchetto com.acme.foo
sono entrambi rilevati dall'infrastruttura MongoDB e JPA. Per risolvere questo problema, sia JavaConfig che il supporto XML consentono di definire filtri di inclusione ed esclusione in modo da poter utilizzare convenzioni di denominazione, annotazioni aggiuntive o simili:
@Configuration
@EnableJpaRepositories(basePackages = "com.acme.foo",
includeFilters = @Filter(JpaRepo.class))
@EnableMongoRepositories(base Packages = "com.acme.foo",
includeFilters = @Filter(MongoRepo.class))
class Config { }
In questo caso, le due annotazioni @JpaRepo
e @MongoRepo
(da creare da te) verrebbe utilizzato per attivare selettivamente il rilevamento annotando con esse le interfacce del repository pertinenti.
Un vero rilevamento automatico è quasi impossibile in quanto è difficile dire a quale negozio stai prendendo di mira esclusivamente dalla dichiarazione dell'interfaccia del repository e nel momento in cui vengono create le definizioni dei bean non sappiamo nemmeno di altre infrastrutture (un EntityManager
o simili) ancora.