Tôi có một thành phần mà tôi muốn loại trừ khỏi một @ComponentScan
thành phần cụ thể @Configuration
:
@Component("foo") class Foo {
...
}
Nếu không, nó dường như xung đột với một số lớp khác trong dự án của tôi. Tôi không hiểu đầy đủ về vụ va chạm, nhưng nếu tôi nhận xét ra @Component
chú thích, mọi thứ sẽ hoạt động như tôi muốn. Nhưng các dự án khác dựa trên thư viện này mong đợi lớp này được quản lý bởi Spring, vì vậy tôi chỉ muốn bỏ qua nó trong dự án của mình.
Tôi đã thử sử dụng @ComponentScan.Filter
:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
nhưng nó dường như không hoạt động. Nếu tôi thử sử dụng FilterType.ASSIGNABLE_TYPE
, tôi gặp lỗi lạ về việc không thể tải một số lớp dường như ngẫu nhiên:
Gây ra bởi: java.io.FileNotFoundException: tài nguyên đường dẫn lớp [junit / framework / TestCase.class] không thể mở được vì nó không tồn tại
Tôi cũng đã thử sử dụng type=FilterType.CUSTOM
như sau:
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 {}
Nhưng điều đó dường như không loại trừ thành phần khỏi quá trình quét như tôi muốn.
Làm cách nào để loại trừ nó?