Ich habe eine Komponente, die ich @ComponentScan
in einer bestimmten von einer ausschließen möchte @Configuration
:
@Component("foo") class Foo {
...
}
Ansonsten scheint es mit einer anderen Klasse in meinem Projekt zusammenzustoßen. Ich verstehe die Kollision nicht vollständig, aber wenn ich die @Component
Anmerkung auskommentiere, funktionieren die Dinge 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 @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 versuche FilterType.ASSIGNABLE_TYPE
, erhalte ich einen seltsamen Fehler, weil ich eine scheinbar zufällige Klasse nicht laden kann:
Auslöser: java.io.FileNotFoundException: Die Klassenpfadressource [junit / framework / TestCase.class] kann nicht geöffnet werden, da sie nicht vorhanden ist
Ich habe auch versucht, type=FilterType.CUSTOM
Folgendes zu verwenden:
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 wie gewünscht vom Scan auszuschließen.
Wie schließe ich es aus?