Ho un componente che voglio escludere da un @ComponentScan
in particolare @Configuration
:
@Component("foo") class Foo {
...
}
Altrimenti, sembra scontrarsi con qualche altra classe nel mio progetto. Non capisco appieno la collisione, ma se commento l' @Component
annotazione, le cose funzionano come voglio. Ma altri progetti che si basano su questa libreria si aspettano che questa classe venga gestita da Spring, quindi voglio saltarla solo nel mio progetto.
Ho provato a usare @ComponentScan.Filter
:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
ma non sembra funzionare. Se provo a utilizzare FilterType.ASSIGNABLE_TYPE
, ottengo uno strano errore di non essere in grado di caricare una classe apparentemente casuale:
Causato da: java.io.FileNotFoundException: la risorsa del percorso di classe [junit / framework / TestCase.class] non può essere aperta perché non esiste
Ho anche provato a usare type=FilterType.CUSTOM
come segue:
class ExcludeFooFilter implements TypeFilter {
@Override
public boolean match(MetadataReader metadataReader,
MetadataReaderFactory metadataReaderFactory) throws IOException {
return metadataReader.getClass() == Foo.class;
}
}
@Configuration @EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
Ma ciò non sembra escludere il componente dalla scansione come desidero.
Come lo escludo?