@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 {}
しかし、それは私が望むようにコンポーネントをスキャンから除外していないようです。
どうすれば除外できますか?