Mam składnik, który chcę @ComponentScan
w szczególności wykluczyć @Configuration
:
@Component("foo") class Foo {
...
}
W przeciwnym razie wydaje się kolidować z inną klasą w moim projekcie. Nie do końca rozumiem kolizję, ale jeśli skomentuję @Component
adnotację, wszystko działa tak, jak chcę. Ale inne projekty, które opierają się na tej bibliotece, oczekują, że ta klasa będzie zarządzana przez Spring, więc chcę ją pominąć tylko w moim projekcie.
Próbowałem użyć @ComponentScan.Filter
:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
ale wygląda na to, że nie działa. Jeśli spróbuję użyć FilterType.ASSIGNABLE_TYPE
, pojawia się dziwny błąd dotyczący niemożności załadowania pozornie przypadkowej klasy:
Przyczyna: java.io.FileNotFoundException: nie można otworzyć zasobu ścieżki klasy [junit / framework / TestCase.class], ponieważ nie istnieje
Próbowałem również użyć type=FilterType.CUSTOM
następujących:
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 {}
Ale to nie wydaje się wykluczać komponentu ze skanowania, tak jak chcę.
Jak to wykluczyć?