wyklucz @Component z @ComponentScan

Mam komponent, który chcę wykluczyć z a@ComponentScan w szczególności@Configuration:

@Component("foo") class Foo {
...
}

W przeciwnym razie wydaje się, że koliduje z jakąś inną klasą w moim projekcie. Nie do końca rozumiem kolizję, ale jeśli skomentuję@Component adnotacja, rzeczy działają 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 to nie działa. Jeśli spróbuję użyćFilterType.ASSIGNABLE_TYPE, Dostaję dziwny błąd, że nie mogę załadować jakiejś 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 też użyćtype=FilterType.CUSTOM jak następuje:

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, jak chcę.

Jak go wykluczyć?

questionAnswers(7)

yourAnswerToTheQuestion