Tenho um componente que desejo excluir de um @ComponentScan
em 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 @Component
anotaçã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.CUSTOM
o 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?