Mam komponent, który chcę wykluczyć z @ComponentScan
w danym @Configuration
:wykluczyć @Component z @ComponentScan
@Component("foo") class Foo {
...
}
W przeciwnym razie, wydaje się kolidować z innej klasy w moim projekcie. Nie w pełni rozumiem kolizję, ale jeśli komentuję adnotację @Component
, wszystko działa tak, jak chcę. Ale inne projekty, które polegają 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 za pomocą @ComponentScan.Filter
:
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}
ale nie wydaje się do pracy. Gdy próbuję za pomocą FilterType.ASSIGNABLE_TYPE
, mam dziwny błąd o byciu w stanie załadować jakąś pozornie przypadkowy Klasa:
spowodowane: java.io.FileNotFoundException: class zasobu path [junit/framework/TestCase.class] nie może być otwarte, ponieważ nie istnieje
próbowałem też za pomocą type=FilterType.CUSTOM
następująco:
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ę, aby wykluczyć ze skanowania składnik jak chcę.
Jak mogę to wykluczyć?
Czy możesz zaakceptować odpowiedź, jeśli pracowałeś dla Ciebie? –