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.

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - com.example.myproject als zu scannendes Basispaket fest.
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - Die typsichere Alternative zu scanBasePackages legt das Paket CustomerController.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 ).

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - schließt DemoConfiguration von der automatischen DemoConfiguration aus.
  2. @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 :

  1. basePackages - kann verwendet werden, um bestimmte zu durchsuchende Pakete anzugeben .
  2. useDefaultFilters - Durch Setzen dieses Attributs auf false (Standardwerte true) können Sie sicherstellen, dass spring @Component , @Repository , @Service oder @Controller automatisch @Controller .
  3. includeFilters - kann verwendet werden, um bestimmte Federanmerkungen / Regex-Muster für die Paketsuche einzubeziehen .
  4. 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:

  1. 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
  2. Platzieren Sie eine bzw. @Configuration , die alle @Configuration Klassen zusammenfassen.
  3. Erstellen Sie eine Datei mit dem Namen spring.factories und platzieren Sie sie in src/main/resources/META-INF .
  4. spring.factories in org.springframework.boot.autoconfigure.EnableAutoConfiguration Eigenschaft org.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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow