1. Vorwort
Ich habe eine Weile Spring Boot studiert. Ich werde meine Forschung organisieren und sie kürzlich mit Ihnen teilen. Es wird ungefähr 10 bis 20 Blogs geben. Die gesamte Serie basiert auf einem einfachen Blog -System, da es nicht sehr leicht zu verstehen ist, nur durch die Theorie zu sprechen. Wenn Sie nicht jedes Mal einige Wissenspunkte durch ein einfaches Mini -Programm systematisch erfassen können, sehen wir uns an, wie ein vollständiges System über Spring Boot implementiert werden kann. Zusätzlich zu den Grundkenntnissen von Spring Boot umfasst diese Serie auch die Kombination aus Spring-Boot mit Datenbank, Caching (Redis), Nachrichtenwarteschlangen usw. sowie Multi-Instance-Bereitstellungen. Interessierte Schüler können aufpassen.
2. Einführung in den Spring Boot
Spring Stiefel ist aus dem Namen zu sehen, den er auf dem Frühling basiert. Daher sollten Schüler, die mit dem Frühling nicht vertraut sind, zuerst etwas über den Frühling lernen. Zweitens hilft uns Spring Boot, viele häufig verwendete Funktionen zu integrieren, wodurch die gesamte Konfiguration einfacher wird. Schüler, die Spring verwendet haben, sollten wissen, dass der Frühling zwar hart daran gearbeitet hat, die Komplexität der Konfiguration zu verringern, aber immer noch problematisch ist, eine vollständig verfügbare (Web-) Umgebung zu konfigurieren, z. B. Protokolle, Datenbanken, Caches usw., dann die Konfiguration von Tomcat und schließlich in das Tomcat -Verzeichnis zu veröffentlichen. Spring Boot hat diesen Prozess stark vereinfacht. Es bietet viele Starter, stellen Sie einfach das entsprechende JAR -Paket vor. Zum Beispiel müssen wir Tomcat integrieren, sondern nur Tomcats Starter vorstellen:
<Depopenty> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Tomcat </artifactid> </abhängig>
Hinweis: Die Beispiele in diesem Artikel basieren alle auf Maven. Wenn Sie also nicht mit Maven vertraut sind, können Sie zuerst sehen, wie Sie es verwenden. Wenn Sie mit Gradle vertraut sind, können Sie auch entsprechende Anpassungen der Konfiguration entsprechend der Situation vornehmen.
Wir können den Starter von Spring Boot aus der offiziellen Dokumentation anzeigen:
Hier habe ich nur einen kleinen Teil abgefangen, und Sie können sehen, dass Spring -Boot Caching, Stapelverarbeitung, MQ, ES usw. unterstützt. Weitere Informationen finden Sie in der offiziellen Dokumentation. Ich werde sonst nicht viel erklären. Ich werde die gesamte Feder -Boot -Funktion anhand von Beispielen erklären. Schauen wir uns zunächst Spring Boot an, um eine Webversion von Hello World zu implementieren!
3. Hello World -Programm
3.1 Hello World Quellcode
Schritt 1: Importieren Sie das JAR -Paket
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </abhängig> </Abhängigkeiten>
Schritt 2: Schreiben Sie die Controller -Klasse
Paket com.pandy.blog; import org.springframework.steretype.controller; Klasse helloWorld {@RequestMapPing ("/Hallo") @ResponseBody public map <String, Objekt> Hallo () {MAP <String, Objekt> map = new HashMap <> (); map.put ("Hallo", "Welt"); Rückgabekarte; }}Schritt 3: Schreiben Sie die Startklasse (Geben Sie die Bibliothek ein)
Paket com.pandy.blog; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootApplication; @springbootApplicationPublic -Anwendung {public static void Main (String [] args) löst Ausnahme aus {SpringApplication. }}Führen Sie die Hauptmethode dieser Klasse aus und besuchen Sie dann http: // localhost: 8080/hello, und Sie können die folgenden Ergebnisse sehen:
Fühlen Sie sich sehr glücklich? Wenn Sie keine einzige Konfigurationslinie haben, können Sie eine Webanwendung direkt ausführen. Aber haben Sie jemals darüber nachgedacht, wie dies erreicht wird, nachdem Sie glücklich sind? Als nächstes analysieren wir die obige Codezeile nach Zeile. Obwohl es nicht viele Zeilen gibt, gibt es immer noch viele Dinge, die es wert sind, zu lernen und zu verstehen.
3.2 POM -Dateianalyse
Beginnen wir mit der POM -Datei, in der nur zwei Abhängigkeiten in die POM -Datei eingeführt werden. Der erste ist Spring-Boot-Starter-Elternteil. Freunde, die mit Maven vertraut sind, sollten wissen, dass Maven auch die Konfiguration aus der übergeordneten POM -Datei wie der Klasse erben kann. Wir können uns die POM-Datei mit Spring-Boot-Starter-Eltern ansehen. Aufgrund von Platzproblemen betrachten wir hier nur zwei Teile. Andere Dinge sind leichter zu verstehen. Sie können sie selbst lesen. Der erste Teil ist:
Diese Datei erbt eine andere POM-Datei, nämlich Spring-Boot-Abhängigkeiten. Diese Datei enthält tatsächlich viele Gläser, und ihre Funktion besteht darin, die Version des JAR -Pakets, von dem der Spring -Boot abhängt, einheitlich zu verwalten. Sie können also später sehen, dass bei der Einführung von Gläser in jede Komponente nicht die Versionsnummer angeben muss. Ein weiterer Punkt, der erläutert werden muss, ist die Verwaltung von Konfigurationsdateien:
Wie Sie sehen können, werden standardmäßig die Dateien im Verzeichnis/src/main/ressourcen -Verzeichnis zum ClassPath als Ressourcendateien hinzugefügt. Darüber hinaus filtert dieser Ort nur die drei Dateien: Anwendung*.yml, Anwendung*.yaml und Anwendung*.Properties. Was bedeutet dieser Filter? Jeder, der Spring MVC konfiguriert hat, sollte wissen, dass wir bei der Konfiguration einer Datenbank die Datenbankinformationen in einer Eigenschaftendatei normalerweise konfigurieren und sie dann in der Feder -Konfigurationsdatei über die Form von <Eigenschaft name = "triverClass" value = "$ {jdbc.driver}" /> einführen. Die Funktion dieses Filters besteht darin, die in der Konfigurationsdatei konfigurierten Namenswertpaare durch die $ {xxx} -Pzeichen in der Federkonfigurationsdatei während der Kompilierung zu ersetzen. Diese Funktion ist jedoch nicht erforderlich. Auch wenn es nicht ersetzt wird, kann Spring die Konfigurationselemente zur Laufzeit lesen.
Zusammenfassen: Die Rolle des Spring-Boot-Starter-Elternteils:
1) JAR -Paketverwaltung.
2) Standardkonfigurationsdateiverwaltung.
3) Häufige Plug-in-Management.
In der Tat können wir aus der Analyse dessen sehen, dass die Kernfunktion von Spring-Boot-Starter-Eltern darin besteht, alle JAR-Pakete zu verwalten, von denen der Spring-Boot abhängt. Es gibt jedoch ein offensichtliches Problem mit der übergeordneten Methode. Viele Unternehmen haben ihre eigenen übergeordneten Dateien, und Maven kann nicht mehrere Eltern konfigurieren. Was soll ich tun, wenn Spring-Boot-Starter-Eltern nicht verwendet wird? Müssen Sie JAR -Pakete einzeln importieren? In der Tat bietet Spring Boot eine weitere Möglichkeit, dieses Problem zu lösen. Das Abhängigkeitsmanagement von Spring Boot ist einer eigenen POM -Datei hinzugefügt:
<DepepecyManagement> <abhängigkeiten> <Depopenty> <gruppe> org.springFramework </abhängig> </abhängig> </abhängig> </abhängig> </abhängigen </abhängig> </abhängig> </abhängig> </abhängig> </abhängigen </abhängig> </abhängig> </abhängig> </abhängigen
Tatsächlich können wir aus der obigen Analyse sehen, dass dies auch die übergeordnete POM-Datei in den Spring-Boot-Starter-Eltern ist, und diese POM-Datei verwaltet hauptsächlich viele JAR-Pakete. Nachdem Sie dies importiert haben, müssen Sie also keine einzelnen nach dem anderen entfernen, um es zu importieren. In diesem Fall wird das Plug-In in Spring-Boot-Starter-Parent jedoch nicht verwendet, und die Standard-Konfigurationsdateiersatzfunktion ist nicht mehr verfügbar. Dies hat jedoch keinen Einfluss. Einerseits sind diese Funktionen nicht erforderlich, und andererseits ist es bei Bedarf einfach, sie selbst hinzuzufügen.
3.3 Helloworld -Klassenanalyse:
Schauen wir uns die HelloWorld -Klasse an. Nachdem Sie Spring MVC verwendet haben, sollten Sie wissen, dass diese Klasse nicht mit Spring Boot zusammenhängt, und die Geschäftsordnung hat nichts mit dem Frühling. Dies ist auch ein Prinzip, an dem der Frühling immer festgehalten hat, und es ist äußerst invasiv, was auch ein Hauptgrund für den Erfolg des Frühlings ist. In dieser Klasse gibt es drei Anmerkungen zum Frühling, nämlich @Controller, @RequestMapping und @ResponseBody, aber diese drei Anmerkungen werden auch von Spring MVC bereitgestellt. Es gibt nicht viel Verbindung mit Spring Boot, daher werde ich hier nicht auf Details eingehen. Wenn Sie nicht sehr klar sind, können Sie den Inhalt von Spring MVC überprüfen. Die Grundfunktionen der drei Anmerkungen sind wie folgt:
3.4 Anwendungsklassenanalyse
Schauen wir uns schließlich die Anwendungsklasse an, und Sie werden feststellen, dass es in dieser Klasse noch weniger Dinge gibt. Es gibt insgesamt nur eine Zeile nützlicher Code, nämlich Springapplication.run (application.class, args); Die Funktion dieser Methode besteht darin, die Anwendungsklasse zu laden. Gibt es also etwas Besonderes an der Anwendungsklasse? Sie können einen Blick darauf werfen. Tatsächlich ist das einzig Besondere an dieser Klasse eine Annotation @springbootApplication, daher muss der Betrieb von Spring Start viele Verbindungen zu dieser Annotation haben. Wir können uns den Quellcode dieser Annotation ansehen:
@Target (elementtype.type) @Retention (retentionPolicy.runtime)@documented@erben@springbootConfiguration@EnableAutoConfiguration@componentscan (exkludeFilters = {@filter (Type = filterType.custom, classes = typexcludeFilter.class), @Filter.typexclude. = AutoconfigurationExcludeFilter.class)}) public @Interface SpringbootApplication {Ich werde nicht über die Hauptmethode dieser Annotation sprechen. Sie können nach dem Lesen sehen. Es ist hauptsächlich, Alias für die oben genannten Anmerkungen bereitzustellen. Jeder sollte wissen, dass die ersten vier Anmerkungen (@Target (elementtype.type), @retention (retentionPolicy.runtime), @Documented, @Inherited) oben erwähnt werden. Freunde, die damit nicht vertraut sind, werden einen Blick darauf werfen, wie JDK maßgeschneiderte Anmerkungen implementiert. Erklären wir die nächsten drei Anmerkungen im Detail: @springbootConfiguration, @enableAutoConfiguration, @Componentscan.
Werfen wir zuerst einen Blick auf die SpringbootConfiguration. Diese Annotation ist relativ einfach und der Quellcode lautet wie folgt:
@Target ({Elementtype.type})@Retention (retentionPolicy.runtime)@documented@configurationPublic @Interface SpringBootConfiguration {}Diese Annotation erbt nur @Configuration. Jeder sollte wissen, dass Spring drei Konfigurationsweisen bietet: (1) XML -Dateikonfiguration (2) Annotationskonfiguration (3) Java -Klassenkonfiguration. @Configuration ist eine Annotation, mit der eine Klasse als Konfigurationsklasse identifiziert wird. Nach dem Frühjahr 4 ist die Konfiguration in Java -Klassen beliebter, sodass Spring Boot auch auf diese Weise ist. Und aus dem Quellcode ist ersichtlich, dass die Funktion der SpringbootConfiguration darin besteht, die Klasse als Konfigurationsklasse zu identifizieren.
Schauen wir uns als nächstes die Annotation von @EnableAutoConfiguration an. Der Quellcode dieser Annotation ist etwas kompliziert. Ich werde hier nicht auf Details eingehen. Ich werde es im späteren Artikel im Detail implementieren. Lassen Sie mich über die Funktion dieser Annotation sprechen. Die Hauptfunktion besteht darin, die automatische Konfiguration zu implementieren. Was ist automatische Konfiguration? Spring Boot erstellt eine automatische Konfiguration basierend auf dem von Ihnen eingeführten JAR -Paket. Wenn beispielsweise ein HSQLDB-JAR im ClassPath vorhanden ist, konfiguriert Spring Boot automatisch eine In-Memory-Datenbank für Sie. In diesem Beispiel können wir auch sehen, dass Spring Boot, da wir Spring-MVC, Tomcat und andere verwandte Gläser eingeführt haben, vermutet, dass Sie ein Webprojekt sind, und dann automatisch einige Spring-MVC-Konfigurationen durchführen, z. Schüler, die mit Spring Enable* Anmerkungen vertraut sind, sollten diese Annotation leichter verstehen können, da es im Frühjahr viele ähnliche Anmerkungen gibt.
Schauen wir uns schließlich @Componentscan an. Diese Annotation wird nicht vom Spring Boot bereitgestellt, sondern von Spring bereitgestellt. Die vom Frühling gescannten Pakete oder Klassen, dh, die Pakete und Klassen automatisch in die Verwaltung von Spring -IOC -Containern enthalten sind. IOC instanziiert diese Klassen gemäß der Konfiguration.
Lassen Sie uns nun die Funktion der Annotation der SpringbootConfiguration zusammenfassen:
1) Markieren Sie, dass diese Klasse eine Konfigurationsklasse ist.
2) Geben Sie das gescannte Paket an, um die Feder -IOC -Behälter zu erleichtern, um ihre Instanz- und Lebenszyklen zu verwalten.
3) Automatische Konfiguration und verwenden Sie das eingeführte JAR -Paket, um die Absicht des Benutzers automatisch zu konfigurieren.
4. Zusammenfassung
Dieser Artikel analysiert eine Webversion von Hello World, die von Spring Boot im Detail implementiert ist. In diesem Beispiel verstehen wir die grundlegenden Operationen von Spring Boot und durch die Analyse des Code in jeder Zeile haben wir ein grobes Verständnis der Prinzipien des Spring -Bootes. Insgesamt verwaltet Spring Boot JAR -Pakete einheitlich und konfiguriert sie dann automatisch gemäß dem von uns ausgewählten Starter. Auf diese Weise löst die Konfiguration des komplexen Abhängigkeitsmanagements und der Stromlinien, damit sich Entwickler mehr auf ihr Geschäft konzentrieren können, ohne sehr komplizierte Konfigurationsarbeiten ausführen zu müssen. Gleichzeitig ist der schnelle und leichte Service von Spring Boot auch für Microservice -Architektur sehr geeignet. Ich werde dies mit Ihnen teilen, wenn Sie die Möglichkeit haben, nachzuverfolgen. Willkommen, weiter zu folgen.