最佳答案
我有一个组件,我想排除从一个 @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.CUSTOM, value=ExcludeFooFilter.class)})
public class MySpringConfiguration {}
但这似乎并不像我希望的那样,把这个部件排除在扫描之外。
怎么排除呢?