spring-boot
Scannen von Paketen
Suche…
Einführung
In diesem Thema werde ich einen Überblick über das Scannen von Frühlingsbootpaketen geben.
Einige grundlegende Informationen finden Sie in Spring Boot-Dokumenten unter folgendem Link ( using-boot-structuring-your-code ). Ich werde jedoch versuchen, genauere Informationen bereitzustellen.
Spring Boot und Spring im Allgemeinen bieten eine Funktion zum automatischen Durchsuchen von Paketen nach bestimmten Anmerkungen, um beans
und configuration
zu erstellen.
Parameter
Anmerkung | Einzelheiten |
---|---|
@SpringBootApplication | Anmerkung zur Hauptfederboot-Anwendung. einmal in der Anwendung verwendet, enthält eine Hauptmethode und dient als Hauptpaket für das Scannen von Paketen |
@SpringBootConfiguration | Gibt an, dass eine Klasse eine Spring Boot-Anwendung bereitstellt. Sollte nur einmal in der Anwendung deklariert werden, normalerweise automatisch durch Setzen von @SpringBootApplication |
@EnableAutoConfiguration | Aktivieren Sie die automatische Konfiguration des Spring-Anwendungskontexts. Sollte nur einmal in der Anwendung deklariert werden, normalerweise automatisch durch Setzen von @SpringBootApplication |
@ComponentScan | Wird verwendet, um die automatische Paketsuche für ein bestimmtes Paket und dessen untergeordnete Pakete auszulösen oder um eine benutzerdefinierte Paketsuche festzulegen |
@Aufbau | Wird verwendet, um eine oder mehrere @Bean Methoden zu deklarieren. Kann durch automatisches Scannen von Paketen ausgewählt werden, um eine oder mehrere @Bean Methoden anstelle der herkömmlichen XML-Konfiguration zu deklarieren |
@Bohne | Gibt an, dass eine Methode eine Bean erzeugt, die vom Spring-Container verwaltet wird. Normalerweise werden mit @Bean versehene @Bean Methoden in mit @Configuration versehenen @Configuration Klassen abgelegt, die von @Configuration zur Erstellung von Java-Konfigurations-Beans ausgewählt werden. |
@Komponente | Durch das Deklarieren einer Klasse als @Component sie zu Kandidaten für die automatische Erkennung, wenn auf Annotation basierende Konfigurations- und Klassenpfad-Scans verwendet werden. Normalerweise wird eine mit @Component annotierte Klasse in der Anwendung zu einer bean |
@Repository | Ursprünglich definiert von Domain-Driven Design (Evans, 2003) als „ein Mechanismus zur Speicherung eingekapselt wird . Es wird verwendet , um ein usualy , um anzuzeigen , Repository für spring data |
@Bedienung | In der Praxis sehr ähnlich zu @Component . Ursprünglich von Domain-Driven Design (Evans, 2003) definiert als "eine Operation, die als Schnittstelle angeboten wird, die im Modell allein steht und keinen gekapselten Zustand hat". |
@Regler | Gibt an, dass eine kommentierte Klasse ein "Controller" ist (z. B. ein Webcontroller). |
@RestController | Eine praktische Annotation, die selbst mit @Controller und @ResponseBody kommentiert @ResponseBody . Wird standardmäßig automatisch ausgewählt, da sie die @Controller Anmerkung enthält, die standardmäßig ausgewählt ist. |
@SpringBootApplication
Die einfachste Methode, Ihren Code mithilfe von Spring Boot für eine gute automatische @SpringBootApplication
zu strukturieren, ist die Verwendung der Annotation @SpringBootApplication
. Diese Anmerkung enthält drei weitere Anmerkungen, die beim automatischen Scannen @SpringBootConfiguration
sind: @SpringBootConfiguration
, @EnableAutoConfiguration
, @ComponentScan
(weitere Informationen zu jeder Anmerkung im Abschnitt Parameters
).
@SpringBootApplication
wird @SpringBootApplication
im Hauptpaket abgelegt und alle anderen Komponenten werden in Paketen unter dieser Datei abgelegt:
com
+- example
+- myproject
+- Application.java (annotated with @SpringBootApplication)
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
Wenn nicht anders angegeben, erkennt Spring Boot @Configuration
, @Component
, @Repository
, @Service
, @Controller
, @RestController
Anmerkungen automatisch unter den gescannten Paketen ( @Configuration
und @RestController
werden ausgewählt, da sie von @Component
und @Controller
entsprechend @Controller
werden ).
Basiscode-Beispiel:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Pakete / Klassen explizit setzen
Seit Version 1.3 können Sie Spring Boot auch zum Scannen bestimmter Pakete scanBasePackages
indem Sie scanBasePackages
oder scanBasePackageClasses
in @SpringBootApplication
anstatt @ComponentScan
anzugeben.
-
@SpringBootApplication(scanBasePackages = "com.example.myproject")
-com.example.myproject
als zu scannendes Basispaket fest. -
@SpringBootApplication(scanBasePackageClasses = CustomerController.class)
- Die typsichere Alternative zuscanBasePackages
legt das PaketCustomerController.java
(com.example.myproject.web
) als zu scannendes Basispaket fest.
Auto-Konfiguration ausschließen
Eine weitere wichtige Funktion ist die Möglichkeit, bestimmte Klassen der automatischen Konfiguration mithilfe von excludeName
oder excludeName
exclude
( excludeName
existiert seit Version 1.3 ).
-
@SpringBootApplication(exclude = DemoConfiguration.class)
- schließtDemoConfiguration
von der automatischenDemoConfiguration
aus. -
@SpringBootApplication(excludeName = "DemoConfiguration")
- tut dies unter Verwendung des vollständig klassifizierten Namens der Klasse.
@ComponentScan
Sie können @ComponentScan
um komplexere @ComponentScan
zu konfigurieren. Es gibt auch @ComponentScans
, die als Container-Annotation fungieren, die mehrere @ComponentScan
Annotationen zusammenfasst.
Grundlegende Codebeispiele
@ComponentScan
public class DemoAutoConfiguration {
}
@ComponentScans({@ComponentScan("com.example1"), @ComponentScan("com.example2")})
public class DemoAutoConfiguration {
}
Die Angabe von @ComponentScan
ohne Konfiguration @SpringBootApplication
wie @SpringBootApplication
und durchsucht alle Pakete unter der mit dieser Annotation annotierten Klasse.
In diesem Beispiel werde ich einige nützliche Attribute von @ComponentScan
:
- basePackages - kann verwendet werden, um bestimmte zu durchsuchende Pakete anzugeben .
- useDefaultFilters - Durch Setzen dieses Attributs auf false (Standardwerte true) können Sie sicherstellen, dass spring
@Component
,@Repository
,@Service
oder@Controller
automatisch@Controller
. - includeFilters - kann verwendet werden, um bestimmte Federanmerkungen / Regex-Muster für die Paketsuche einzubeziehen .
- excludeFilters - kann verwendet werden, um bestimmte Federanmerkungen / Regex-Muster für die Paketsuche auszuschließen .
Es gibt viele weitere Attribute, aber diese werden am häufigsten verwendet, um das Scannen von Paketen anzupassen.
Erstellen Sie Ihre eigene Autokonfiguration
Spring Boot basiert auf vielen vorgefertigten übergeordneten Projekten zur automatischen Konfiguration. Sie sollten bereits mit Spring Boot Starter-Projekten vertraut sein.
Sie können leicht ein eigenes Starterprojekt erstellen, indem Sie die folgenden einfachen Schritte ausführen:
- Erstellen Sie einige
@Configuration
Klassen, um Standard-Beans zu definieren. Sie sollten externe Eigenschaften so weit wie möglich verwenden, um Anpassungen zuzulassen, und versuchen, Auto-Configuration Helper-Annotationen wie@AutoConfigureBefore
,@AutoConfigureAfter
,@ConditionalOnBean
,@ConditionalOnMissingBean
usw. zu verwenden. Weitere Informationen zu jeder Anmerkung finden Sie in den offiziellen Anmerkungen zu den Bedingungen - Platzieren Sie eine bzw.
@Configuration
, die alle@Configuration
Klassen zusammenfassen. - Erstellen Sie eine Datei mit dem Namen
spring.factories
und platzieren Sie sie insrc/main/resources/META-INF
. -
spring.factories
inorg.springframework.boot.autoconfigure.EnableAutoConfiguration
Eigenschaftorg.springframework.boot.autoconfigure.EnableAutoConfiguration
mit durch Kommas getrennten Werten Ihrer@Configuration
Klassen fest:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration
Mit dieser Methode können Sie Ihre eigenen Autokonfigurationsklassen erstellen, die per Spring-Boot ausgewählt werden. Spring-Boot durchsucht automatisch alle Abhängigkeiten von Maven / Gradle nach einer spring.factories
Datei. Wenn sie eine findet, fügt sie alle @Configuration
angegebenen @Configuration
Klassen zum automatischen Konfigurationsprozess hinzu.
Stellen Sie sicher , dass Ihre auto-configuration
Starter Projekt nicht enthält spring boot maven plugin
, weil sie das Projekt als eine ausführbare JAR - Paket und wird nicht durch den Classpath geladen werden , wie beabsichtigt - Feder Boot nicht in der Lage Ihr finden spring.factories
und lädt Ihre Konfiguration nicht