Ich bin nicht sicher, ob Sie Pakete explizit mit einem <Ausschluss-Filter> ausschließen können, aber ich wette, die Verwendung eines Regex-Filters würde Sie effektiv dorthin bringen:
<context:component-scan base-package="com.example">
<context:exclude-filter type="regex" expression="com\.example\.ignore\..*"/>
</context:component-scan>
Um es annotationsbasiert zu machen, würden Sie jede Klasse, die Sie für Integrationstests ausgeschlossen haben möchten, mit @ com.example.annotation.ExcludedFromITests kommentieren. Dann würde der Komponentenscan folgendermaßen aussehen:
<context:component-scan base-package="com.example">
<context:exclude-filter type="annotation" expression="com.example.annotation.ExcludedFromITests"/>
</context:component-scan>
Das ist klarer, da Sie jetzt im Quellcode selbst dokumentiert haben, dass die Klasse nicht für Integrationstests in einem Anwendungskontext enthalten sein soll.
Ich verwende
@ComponentScan
Folgendes für denselben Anwendungsfall. Dies entspricht der XML-Antwort von BenSchro10 , verwendet jedoch Anmerkungen. Beide verwenden einen Filter mittype=AspectJ
quelle
FilterType.REGEX
für diesen Ansatz verwendenFilterType.REGEX
. Vielleicht könnte die Antwort aktualisiert werden, um dies widerzuspiegeln?Für Spring 4 verwende ich Folgendes
(ich poste es, da die Frage 4 Jahre alt ist und mehr Leute Spring 4 als Spring 3.1 verwenden):
quelle
Es scheint, dass Sie dies über XML getan haben, aber wenn Sie in der neuen Best Practice von Spring arbeiten würden, wäre Ihre Konfiguration in Java, und Sie könnten sie wie folgt ausschließen:
quelle
Dies funktioniert in Spring 3.0.5. Ich würde also denken, dass es in 3.1 funktionieren würde
quelle
Ich denke, Sie sollten Ihre Pakete in einer bequemeren Hierarchie umgestalten, damit sie nicht im Basispaket enthalten sind.
Aber wenn Sie dies nicht können, versuchen Sie:
Hier finden Sie weitere Beispiele: Verwenden von Filtern zum Anpassen des Scannens
quelle
Eine Sache, die für mich zu funktionieren scheint, ist folgende:
Oder in XML:
Dies überschreibt den Standard ,
resourcePattern
das ist"**/*.class"
.Dies scheint die typsicherste Möglichkeit zu sein, NUR Ihr Basispaket einzuschließen, da dieses Ressourcenmuster immer dasselbe und relativ zu Ihrem Basispaket ist.
quelle
Sie können auch @SpringBootApplication verwenden , das laut Spring-Dokumentation dieselbe Funktionalität wie die folgenden drei Anmerkungen bietet : @Configuration , @EnableAutoConfiguration @ComponentScan in einer Anmerkung.
quelle
Sie können auch ein bestimmtes Paket einschließen und ausschließen wie:
Einschließen und Ausschließen (beide)
NUR ausschließen
quelle