@Component von @ComponentScan ausschließen

Ich habe eine Komponente, die ich von a ausschließen möchte@ComponentScan in einem bestimmten@Configuration:

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

Ansonsten scheint es mit einer anderen Klasse in meinem Projekt zu kollidieren. Ich verstehe die Kollision nicht ganz, aber wenn ich das auskommentiere@Component Anmerkung, die Dinge funktionieren so, wie ich es möchte. Andere Projekte, die auf dieser Bibliothek basieren, erwarten jedoch, dass diese Klasse von Spring verwaltet wird. Daher möchte ich sie nur in meinem Projekt überspringen.

Ich habe versucht mit@ComponentScan.Filter:

@Configuration 
@EnableSpringConfigured
@ComponentScan(basePackages = {"com.example"}, excludeFilters={
  @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)})
public class MySpringConfiguration {}

aber es scheint nicht zu funktionieren. Wenn ich es versucheFilterType.ASSIGNABLE_TYPE, Ich bekomme einen seltsamen Fehler, weil ich eine scheinbar zufällige Klasse nicht laden kann:

Auslöser: java.io.FileNotFoundException: Klassenpfadressource [junit / framework / TestCase.class] kann nicht geöffnet werden, da sie nicht vorhanden ist

Ich habe auch versucht mittype=FilterType.CUSTOM wie folgt:

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 {}

Aber das scheint die Komponente nicht vom Scan auszuschließen, wie ich es möchte.

Wie schließe ich es aus?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage