Tengo un componente que quiero excluir de un @ComponentScan
en 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 @Component
anotació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.CUSTOM
lo 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?