Tenho um componente que desejo excluir de um @ComponentScanem particular @Configuration:
@Component("foo") class Foo {
...
}
Caso contrário, parece colidir com alguma outra classe em meu projeto. Não entendo totalmente a colisão, mas se eu comentar a @Componentanotação, as coisas funcionam como eu quero. Mas outros projetos que dependem desta biblioteca esperam que esta classe seja gerenciada pelo Spring, então eu quero pular apenas no meu projeto.
Tentei usar @ComponentScan.Filter:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
mas não parece funcionar. Se eu tentar usar FilterType.ASSIGNABLE_TYPE, recebo um erro estranho sobre não ser capaz de carregar alguma classe aparentemente aleatória:
Causado por: java.io.FileNotFoundException: recurso de caminho de classe [junit / framework / TestCase.class] não pode ser aberto porque não existe
Eu também tentei usar type=FilterType.CUSTOMo seguinte:
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 varredura como eu desejo.
Como faço para excluí-lo?