J'ai un composant que je veux exclure d'un @ComponentScan
dans une @Configuration
particulière :
@Component("foo") class Foo {
...
}
Autrement, il semble entrer en conflit avec une autre classe de mon projet. Je ne comprends pas entièrement la collision, mais si je commente l'annotation @Component
, les choses fonctionnent comme je le souhaite. Cependant, d'autres projets qui dépendent de cette bibliothèque s'attendent à ce que cette classe soit gérée par Spring, donc je veux la sauter uniquement dans mon projet.
J'ai essayé d'utiliser @ComponentScan.Filter
:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
mais cela ne semble pas fonctionner. Si j'essaie d'utiliser FilterType.ASSIGNABLE_TYPE
, je reçois une erreur étrange disant qu'il est impossible de charger une classe apparemment aléatoire :
Caused by: java.io.FileNotFoundException: class path resource [junit/framework/TestCase.class] cannot be opened because it does not exist
J'ai également essayé d'utiliser type=FilterType.CUSTOM
comme suit :
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.CUSTOM, value=ExcludeFooFilter.class)})
public class MySpringConfiguration {}
Mais cela ne semble pas exclure le composant de l'analyse comme je le souhaite.
Comment puis-je l'exclure ?