Saya memiliki komponen yang ingin saya kecualikan dari a @ComponentScan
secara khusus @Configuration
:
@Component("foo") class Foo {
...
}
Jika tidak, sepertinya akan bentrok dengan kelas lain dalam proyek saya. Saya tidak sepenuhnya memahami tabrakan, tetapi jika saya mengomentari @Component
anotasi, semuanya berfungsi seperti yang saya inginkan. Tetapi proyek lain yang mengandalkan pustaka ini mengharapkan kelas ini dikelola oleh Spring, jadi saya ingin melewatkannya hanya di proyek saya.
Saya mencoba menggunakan @ComponentScan.Filter
:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
tetapi tampaknya tidak berhasil. Jika saya mencoba menggunakan FilterType.ASSIGNABLE_TYPE
, saya mendapatkan kesalahan aneh tentang tidak dapat memuat beberapa kelas yang tampaknya acak:
Disebabkan oleh: java.io.FileNotFoundException: sumber daya jalur kelas [junit / framework / TestCase.class] tidak dapat dibuka karena tidak ada
Saya juga mencoba menggunakan type=FilterType.CUSTOM
sebagai berikut:
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 {}
Tapi sepertinya itu tidak mengecualikan komponen dari pemindaian seperti yang saya inginkan.
Bagaimana cara mengecualikannya?