1. Préface
J'étudie la botte de printemps depuis un moment. Je vais organiser mes recherches et la partager avec vous récemment. Il y aura environ 10 à 20 blogs. L'ensemble de la série sera basé sur un système de blog simple, car il n'est pas très facile à comprendre simplement en parlant de la théorie, et si vous ne pouvez pas systématiquement saisir certains points de connaissance à chaque fois via un mini programme simple, donc basé sur un système simple, voyons comment implémenter un système complet via Spring Boot. En plus des points de connaissance de base de Spring Boot, cette série implique également la combinaison de Spring Boot avec la base de données, la mise en cache (redis), les files d'attente de messages, etc., ainsi que le déploiement multi-instance. Les étudiants intéressés peuvent faire attention.
2. Introduction à Spring Boot
Spring Boot peut être vu à partir du nom qu'il est basé sur le printemps, afin que les élèves qui ne connaissent pas le printemps devraient apprendre sur le printemps en premier. Deuxièmement, Spring Boot nous aide à intégrer de nombreuses fonctions couramment utilisées, ce qui rend la configuration entière plus simple. Les étudiants qui ont utilisé Spring devraient savoir que bien que Spring ait travaillé dur pour réduire la complexité de la configuration, il est encore assez difficile de configurer un environnement (Web) entièrement disponible, tel que la configuration des journaux, des bases de données, des caches, etc., puis de la configuration de Tomcat, et enfin publier le programme dans le répertoire Tomcat. Spring Boot a considérablement simplifié ce processus. Il fournit de nombreux entrées, il suffit d'introduire le package JAR correspondant. Par exemple, nous devons intégrer Tomcat, il suffit d'introduire le démarreur de Tomcat:
<dependency> <proupId> org.springframework.boot </rombasid> <ArtifactId> printemp-boot-starter-tomcat </retifactid> </pedidency>
Remarque: Les exemples de cet article sont tous basés sur Maven, donc si vous n'êtes pas familier avec Maven, vous pouvez d'abord voir comment l'utiliser. Si vous connaissez Gradle, vous pouvez également effectuer des ajustements correspondants à la configuration en fonction de la situation.
Nous pouvons voir le démarreur fourni par Spring Boot à partir de la documentation officielle:
Ici, je n'ai intercepté qu'une petite pièce, et vous pouvez voir que Spring Boot prend en charge la mise en cache, le traitement par lots, MQ, ES, etc. Pour la liste complète, reportez-vous à la documentation officielle. Je n'expliquerai pas grand-chose d'autre. J'expliquerai toute la fonction de démarrage de printemps via des exemples. Regardons d'abord Spring Boot pour implémenter une version Web de Hello World!
3. Hello World Program
3.1 Hello World Source Code
Étape 1: Importez le package JAR
<parent> <proupId> org.springframework.boot </prôdId> <Artifactid> printemps-boot-starter-Parent </ artifactive> <version> 1.5.8.release </-version> </parelp> <Detences> <Dedency> <proupId> org.springframework.boot </prountid> <artifactid> spring-boot-starterweb </prountid> <artifactid> spring-boot-starterweb </prountid> <artifactive> </dpendance> </dpendances>
Étape 2: Écrivez la classe du contrôleur
Package com.pandy.blog; import org.springframework.steretype.controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.responsebody; import java.util.hashmap; import java.util.map; Helloworld {@RequestMapping ("/ Hello") @ResponseBody Public Map <String, Object> Hello () {Map <String, Object> Map = new Hashmap <> (); map.put ("bonjour", "monde"); carte de retour; }}Étape 3: Écrivez la classe de démarrage (entrez la bibliothèque)
package com.pandy.blog; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootapplication; @springbootapplicationpublic class application {public static void main (string [] args) lance l'exception {SpringApplication.Run (application.class, args); }}Exécutez la méthode principale de cette classe, puis visitez http: // localhost: 8080 / bonjour, et vous pouvez voir les résultats suivants:
Vous sentez-vous très heureux? Si vous n'avez pas une seule ligne de configuration, vous pouvez exécuter directement une application Web. Mais avez-vous déjà réfléchi à la façon dont cela est réalisé après avoir été heureux? Ensuite, nous analysons le code ci-dessus ligne par ligne. Bien qu'il n'y ait pas beaucoup de lignes, il y a encore beaucoup de choses à apprendre et à comprendre.
3.2 Analyse des fichiers POM
Commençons par le fichier POM, qui introduit uniquement deux dépendances dans le fichier POM. Le premier est le parent-starter-starter-starter. Les amis qui connaissent Maven doivent savoir que Maven peut également hériter de la configuration du fichier POME POM comme la classe. Nous pouvons consulter le fichier POM de Spring-Boot-Starter-Parent. En raison de problèmes d'espace, nous ne regardons que deux parties ici. D'autres choses sont plus faciles à comprendre. Vous pouvez les lire vous-même. La première partie est:
Ce fichier hérite d'un autre fichier POM, à savoir les dépendances de Spring-Boot. Ce fichier contient en fait beaucoup de bocaux, et sa fonction est de gérer uniformément la version du package JAR dont dépend le démarrage de Spring. Vous pouvez donc voir plus tard que lors de l'introduction de bocaux dans chaque composant, il n'est pas nécessaire de spécifier le numéro de version. Un autre point qui doit être expliqué est la gestion des fichiers de configuration:
Comme vous pouvez le voir, par défaut, les fichiers du répertoire / src / main / ressources seront ajoutés au ClassPath en tant que fichiers de ressources. De plus, cet endroit filtre uniquement les trois fichiers: application * .yml, application * .yaml et application * .properties. Que signifie ce filtre? Quiconque a configuré Spring MVC doit savoir que lors de la configuration d'une base de données, nous configurons généralement les informations de base de données dans un fichier Properties, puis les introduisons dans le fichier de configuration de Spring via le formulaire de <propriété name = "DriverClass" value = "$ {jdbc.driver}" />. La fonction de ce filtre est de remplacer les paires de valeur de nom configurées dans le fichier de configuration par les caractères $ {xxx} dans le fichier de configuration de ressort pendant la compilation, mais cette fonction n'est pas nécessaire. Même s'il n'est pas remplacé, Spring peut lire les éléments de configuration au moment de l'exécution.
Pour résumer: le rôle de la parente-starter du printemps:
1) Gestion des packages JAR.
2) Gestion de fichiers de configuration par défaut.
3) Gestion du plug-in commune.
En fait, à partir de l'analyse de ce qui est, nous pouvons voir que la fonction centrale du parent-starter-starter-starter est de gérer tous les packages de pot dont dépend le démarrage de Spring. Cependant, il y a un problème évident avec la méthode parent. De nombreuses entreprises ont leurs propres fichiers parents et Maven ne peut pas configurer plusieurs parents. Que dois-je faire si le parent de spring-boot-starter n'est pas utilisé? Avez-vous besoin d'importer des packages JAR un par un? En fait, Spring Boot fournit une autre façon de résoudre ce problème, qui consiste à ajouter la gestion de la dépendance de Spring Boot à son propre fichier POM:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.9.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependency> </dependency> </dependency> </dependency> </dependency> </Dependency> </ Dependency> </ Dependency> </ Dependency> </ Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependance> </Dedency> </Dependency> </Dependency> </Dependency> </Dedency> </Dedency> </Dependency> </Dependency> </Dedency> </Dedency> </Dependence> </Dependency> </ Dependency> </ Dependency> </ Dependency> </ Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependance> </Dedency> </Dependency> </Dependency> </Dependency> </Dedency> </Dedency> </Dependency> </Dependency> </Dedency> </Dedency> </Dependence> </Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </Dependency> </
En fait, à partir de l'analyse ci-dessus, nous pouvons voir qu'il s'agit également du parent du fichier POM-starter-starter-starter-starter, et ce fichier POM gère principalement beaucoup de packages JAR. Donc, après l'importation de cela, vous n'avez pas besoin de prendre un par un seul pour l'importer. Cependant, dans ce cas, le plug-in dans Spring-Boot-Starter-Parent ne sera pas utilisé et la fonction de remplacement de fichier de configuration par défaut n'est plus disponible. Cependant, cela n'a aucun effet. D'une part, ces fonctions ne sont pas nécessaires, et d'autre part, si nécessaire, il est facile de les ajouter vous-même.
3.3 Analyse des classes Helloworld:
Regardons la classe Helloworld. Après avoir utilisé Spring MVC, vous devez savoir que cette classe n'est pas liée à Spring Boot et que le code commercial n'a rien lié au printemps. C’est aussi un principe auquel le printemps a toujours adhéré, et il est extrêmement invasif, ce qui est également une raison principale du succès du printemps. Il y a trois annotations liées au printemps dans cette classe, à savoir @Controller, @RequestMapping et @ResponseBody, mais ces trois annotations sont également fournies par Spring MVC. Il n'y a pas beaucoup de connexion avec Spring Boot, donc je n'entrerai pas dans les détails ici. Si vous n'êtes pas très clair, vous pouvez consulter le contenu de Spring MVC. Les fonctions de base des trois annotations sont les suivantes:
3.4 Analyse des classes d'application
Enfin, regardons la classe d'application, et vous constaterez qu'il y a encore moins de choses dans cette classe. Il n'y a qu'une seule ligne de code utile au total, à savoir SpringApplication.Run (application.class, args); La fonction de cette méthode est de charger la classe d'application. Alors, y a-t-il quelque chose de spécial dans la classe d'application? Vous pouvez jeter un œil. En fait, la seule chose particulière à propos de cette classe est une annotation @springbootapplication, donc le fonctionnement de Spring Boot doit avoir de nombreuses connexions avec cette annotation. Nous pouvons examiner le code source de cette annotation:
@Target (elementType.Type) @retention (retentionPolicy.runtime) @ documenté @ hérité @ springbootconfiguration @ perteAutoConfiguration @ ComponentsCan (excludefilters = @filter (type = filterType.Custom, Classes = TypeExClust AutoconfigurationxcludFilter.class)}) public @Interface SpringbootApplication {Je ne parlerai pas de la méthode principale de cette annotation. Vous pouvez voir après l'avoir lu. Il s'agit principalement de fournir un alias pour les annotations ci-dessus. Tout le monde doit savoir que les quatre premières annotations (@target (elementType.Type), @retention (retentionPolicy.runtime), @Documented, @Inherited) sont mentionnées ci-dessus. Les amis qui ne le connaissent pas vont voir comment JDK met en œuvre des annotations personnalisées. Expliquons les trois annotations suivantes en détail: @springbootconfiguration, @enableAutoConfiguration, @ComponentScan.
Jetons un coup d'œil à SpringbootConfiguration en premier. Cette annotation est relativement simple et le code source est le suivant:
@Target ({elementType.Type}) @ Rétention (RetentionPolicy.Runtime) @ documentée @ ConfigurationPublic @Interface SpringbootConfiguration {}Cette annotation hérite uniquement de @configuration. Tout le monde doit savoir que Spring fournit trois façons de configuration: (1) Configuration du fichier XML (2) Configuration d'annotation (3) Configuration de la classe Java. @Configuration est une annotation utilisée pour identifier une classe en tant que classe de configuration. Après le printemps 4, la configuration est plus populaire dans les classes Java, donc Spring Boot a également tendance à être de cette manière. Et à partir du code source, on peut voir que la fonction de SpringbootConfiguration est d'identifier la classe en tant que classe de configuration.
Ensuite, jetons un coup d'œil à l'annotation @EnableAutoConfiguration. Le code source de cette annotation est un peu compliqué. Je n'entrerai pas dans les détails ici. Je vais l'implémenter dans l'article ultérieur en détail. Permettez-moi de parler de la fonction de cette annotation. Sa fonction principale est d'implémenter la configuration automatique. Qu'est-ce que la configuration automatique? Spring Boot fera une configuration automatique en fonction du package JAR que vous avez introduit. Par exemple, s'il y a un pot HSQLDB dans ClassPath, Spring Boot configurera automatiquement une base de données en mémoire pour vous. Dans cet exemple, nous pouvons également voir que parce que nous avons introduit Spring-MVC, Tomcat et d'autres pots connexes, Spring Boot devinera que vous êtes un projet Web, puis il fera automatiquement des configurations Spring MVC, telles que la prise en charge des ressources statiques, la prise en charge de la conversion automatiquement des résultats renvoyés en JSON, etc., c'est le résultat de la configuration automatique. Les étudiants qui connaissent le printemps permettent * les annotations devraient être en mesure de comprendre cette annotation plus facilement, car il existe de nombreuses annotations similaires au printemps.
Enfin, jetons un coup d'œil à @componentscan. Cette annotation n'est pas fournie par Spring Boot, mais est fournie par Spring. Les packages ou classes numérisés par le printemps, c'est-à-dire quels packages et classes seront automatiquement inclus dans la gestion des conteneurs Spring IOC. IOC instancie ces classes en fonction de la configuration.
Résumons maintenant la fonction de l'annotation SpringbootConfiguration:
1) Marquez que cette classe est une classe de configuration.
2) Spécifiez le package numérisé pour faciliter les conteneurs Spring IOC pour gérer leur instance et leurs cycles de vie.
3) Configuration automatique et utilisez le package JAR introduit pour deviner l'intention de l'utilisateur de configurer automatiquement.
4. Résumé
Cet article analyse une version Web de Hello World implémentée par Spring Boot en détail. Grâce à cet exemple, nous comprenons les opérations de base de Spring Boot, et grâce à l'analyse du code sur chaque ligne, nous avons une compréhension approximative des principes de Spring Boot. Dans l'ensemble, Spring Boot gère uniformément les packages JAR, puis les configure automatiquement en fonction du démarreur que nous choisissons. De cette façon, résout la gestion complexe des dépendances et rationalise la configuration, afin que les développeurs puissent se concentrer davantage sur leur entreprise sans avoir à faire un travail de configuration très compliqué. Dans le même temps, le service rapide et léger de Spring Boot est également très adapté à l'architecture microservice. Je partagerai cela avec vous si vous avez l'occasion de suivre. Bienvenue pour continuer à suivre.