Eu tenho um componente que eu quero excluir de uma @ComponentScanem uma determinada @Configuration:
@Component(foo) class Foo {
...
}
Caso contrário, parece colidir com alguma outra classe no meu projeto. Eu não entender completamente a colisão, mas se eu comente a @Componentanotação, as coisas funcionam como eu quero que eles. Mas outros projetos que contam com esta biblioteca esperar desta classe a ser gerido pela Spring, então eu quero ignorá-lo apenas em meu projeto.
Eu tentei usar @ComponentScan.Filter:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {com.example}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
mas ele não aparece para trabalhar. Se eu tentar usar FilterType.ASSIGNABLE_TYPE, eu recebo um erro estranho sobre ser incapaz de carregar alguma classe aparentemente aleatória:
Causada por: java.io.FileNotFoundException: recurso caminho de classe [junit / framework / TestCase.class] não pode ser aberto porque ele não existe
Eu também tentei usar type=FilterType.CUSTOMda seguinte forma:
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 {}
Mas isso não parece excluir o componente da verificação como eu quero.
Como faço para excluí-lo?













