У меня есть компонент, который я хочу исключить из @ComponentScan
в конкретном @Configuration
:
@Component("foo") class Foo {
...
}
В противном случае, похоже, он сталкивается с каким-то другим классом в моем проекте. Я не совсем понимаю столкновение, но если я прокомментирую аннотацию @Component
, все работает так, как я хочу. Но другие проекты, которые полагаются на эту библиотеку, ожидают, что этот класс будет управляться Spring, поэтому я хочу пропустить его только в моем проекте.
Я попытался использовать @ComponentScan.Filter
:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
но он не работает. Если я попытаюсь использовать FilterType.ASSIGNABLE_TYPE
, я получаю странную ошибку в том, что не могу загрузить какой-то, казалось бы, случайный класс:
Вызвано: java.io.FileNotFoundException: ресурс пути класса [junit/framework/TestCase.class] не может быть открыт, потому что он не существует
Я также попытался использовать type=FilterType.CUSTOM
следующим образом:
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 {}
Но это, похоже, не исключает компонент из сканирования, как я хочу.
Как его исключить?