Tengo un componente que quiero excluir de un @ComponentScanen un particular @Configuration:
@Component("foo") class Foo {
...
}
De lo contrario, parece chocar con alguna otra clase en mi proyecto. No entiendo completamente la colisión, pero si comento la @Componentanotación, las cosas funcionan como quiero. Pero otros proyectos que dependen de esta biblioteca esperan que Spring administre esta clase, por lo que quiero omitirla solo en mi proyecto.
Intenté usar @ComponentScan.Filter:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
pero no parece funcionar. Si intento usar FilterType.ASSIGNABLE_TYPE, obtengo un error extraño acerca de que no puedo cargar una clase aparentemente aleatoria:
Causado por: java.io.FileNotFoundException: recurso de ruta de clase [junit / framework / TestCase.class] no se puede abrir porque no existe
También intenté usar type=FilterType.CUSTOMlo siguiente:
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 {}
Pero eso no parece excluir el componente del escaneo como quiero.
¿Cómo lo excluyo?