У мене є компонент, який я хочу виключити з a @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 {}
Але це, здається, не виключає компонент із сканування, як я хочу.
Як це виключити?