Recherche…


Introduction

Dans cette rubrique, je vais donner un aperçu de la numérisation du package de démarrage au printemps.

Vous pouvez trouver des informations de base dans les documents de démarrage du printemps dans le lien suivant (en utilisant-boot-structuring-your-code ) mais je vais essayer de fournir des informations plus détaillées.

Spring Boot, et Spring en général, fournissent une fonctionnalité pour analyser automatiquement les packages de certaines annotations afin de créer des beans et une configuration .

Paramètres

Annotation Détails
@PrintBootApplication Annotation principale de l'application de démarrage à ressort. utilisé une fois dans l'application, contient une méthode principale et sert de package principal pour l'analyse des packages
@PrintBootConfiguration Indique qu'une classe fournit une application Spring Boot. Doit être déclaré une seule fois dans l'application, généralement automatiquement en définissant @SpringBootApplication
@EnableAutoConfiguration Activer la configuration automatique du contexte d'application Spring. Doit être déclaré une seule fois dans l'application, généralement automatiquement en définissant @SpringBootApplication
@ CompoScan Utilisé pour déclencher une analyse automatique des packages sur un package donné et ses enfants ou pour définir une analyse de package personnalisée
@Configuration Utilisé pour déclarer une ou plusieurs méthodes @Bean . Peut être sélectionné par analyse automatique des packages afin de déclarer une ou plusieurs méthodes @Bean au lieu d'une configuration XML classique
@Haricot Indique qu'une méthode produit un bean à gérer par le conteneur Spring. En @Bean générale, les méthodes annotées @Bean seront placées dans les classes annotées @Configuration qui seront sélectionnées par l'analyse du package pour créer des beans basés sur la configuration Java.
@Composant En déclarant une classe en tant que @Component elle devient un candidat à la détection automatique lors de l'utilisation de la configuration basée sur des annotations et de l'analyse des classpath. En général, une classe annotée avec @Component deviendra un bean dans l'application
@Dépôt Défini à l'origine par Domain-Driven Design (Evans, 2003) comme "un mécanisme d'encapsulation du stockage. Il est généralement utilisé pour indiquer un Repository de spring data
@Un service Très similaire en pratique à @Component . Défini à l'origine par Domain-Driven Design (Evans, 2003) comme "une opération offerte en tant qu'interface autonome dans le modèle, sans état encapsulé".
@Manette Indique qu'une classe annotée est un "Controller" (par exemple un contrôleur Web).
@RestController Une annotation pratique qui est elle-même annotée avec @Controller et @ResponseBody . Sera automatiquement sélectionné par défaut car il contient l'annotation @Controller qui est sélectionnée par défaut.

@PrintBootApplication

Le moyen le plus simple de structurer votre code à l'aide du démarrage par ressort pour une analyse automatique de package @SpringBootApplication consiste à utiliser l'annotation @SpringBootApplication . Cette annotation fournit en elle-même 3 autres annotations @SpringBootConfiguration analyse automatique: @SpringBootConfiguration , @EnableAutoConfiguration , @ComponentScan (plus d'informations sur chaque annotation dans la section Parameters ).

@SpringBootApplication sera @SpringBootApplication placé dans le package principal et tous les autres composants seront placés dans des packages sous ce fichier:

com
 +- example
     +- myproject
         +- Application.java (annotated with @SpringBootApplication)
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

Sauf indication contraire, le démarrage du printemps détecte automatiquement les annotations @Configuration , @Component , @Repository , @Service , @Controller et @RestController sous les packages analysés ( @Configuration et @RestController sont sélectionnés car annotés par @Component et @Controller conséquence) ).

Exemple de code de base:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
}

Définition explicite de paquets / classes

Depuis la version 1.3, vous pouvez également indiquer que le démarrage du printemps analyse des packages spécifiques en définissant scanBasePackages ou scanBasePackageClasses dans @SpringBootApplication au lieu de spécifier @ComponentScan .

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") : définit com.example.myproject comme package de base à analyser.
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - une alternative sécurisée à scanBasePackages définit le package de CustomerController.java , com.example.myproject.web , comme package de base à analyser.

Hors configuration automatique

Une autre fonctionnalité importante est la possibilité d'exclure des classes de configuration automatique spécifiques à l'aide de exclude ou excludeName ( excludeName existe depuis la version 1.3 ).

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - exclura DemoConfiguration de l'analyse automatique des packages.
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - fera de même en utilisant le nom de classe entièrement classé.

@ CompoScan

Vous pouvez utiliser @ComponentScan pour configurer une analyse de package plus complexe. Il y a aussi @ComponentScans qui agit comme une annotation de conteneur qui regroupe plusieurs annotations @ComponentScan .

Exemples de code de base

@ComponentScan
public class DemoAutoConfiguration {
}

@ComponentScans({@ComponentScan("com.example1"), @ComponentScan("com.example2")})
public class DemoAutoConfiguration {
}

@ComponentScan sans configuration agit comme @SpringBootApplication et analyse tous les packages sous la classe annotée avec cette annotation.

Dans cet exemple, je vais indiquer certains des attributs utiles de @ComponentScan :

  1. basePackages - peut être utilisé pour indiquer des packages spécifiques à analyser.
  2. useDefaultFilters - En définissant cet attribut sur false (par défaut true), vous pouvez vous assurer que Spring @Component pas @Component , @Repository , @Service ou @Controller .
  3. includeFilters - peut être utilisé pour inclure des annotations / motifs de regex de printemps spécifiques à inclure dans l'analyse des packages.
  4. excludeFilters - peut être utilisé pour exclure des motifs d'annotation / regex de printemps spécifiques à inclure dans l'analyse de package.

Il existe beaucoup plus d'attributs, mais ceux-ci sont les plus couramment utilisés pour personnaliser l'analyse des packages.

Créer votre propre configuration automatique

Spring boot est basé sur de nombreux projets parent pré-configurés. Vous devriez déjà être familier avec les projets de démarrage de printemps.

Vous pouvez facilement créer votre propre projet de démarrage en procédant comme suit:

  1. Créez des classes @Configuration pour définir les beans par défaut. Vous devez utiliser autant que possible les propriétés externes pour autoriser la personnalisation et essayer d'utiliser des annotations d'assistance automatique telles que @AutoConfigureBefore , @AutoConfigureAfter , @ConditionalOnBean , @ConditionalOnMissingBean etc. Vous trouverez des informations plus détaillées sur chaque annotation dans la documentation officielle .
  2. Placez un fichier / fichier de configuration automatique qui regroupe toutes les classes @Configuration .
  3. Créez un fichier nommé spring.factories et placez-le dans src/main/resources/META-INF .
  4. Dans spring.factories , définissez la propriété org.springframework.boot.autoconfigure.EnableAutoConfiguration avec les valeurs séparées par des virgules de vos classes @Configuration :
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

En utilisant cette méthode, vous pouvez créer vos propres classes de configuration automatique qui seront sélectionnées par boot-spring. Spring-boot analyse automatiquement toutes les dépendances maven / gradle pour un fichier spring.factories , s'il en trouve un, il ajoute toutes les classes @Configuration spécifiées dans son processus de configuration automatique.

Assurez-vous que votre projet d' spring boot maven plugin auto-configuration ne contient pas de spring boot maven plugin - spring boot maven plugin car il compilera le projet en tant que fichier JAR exécutable et ne sera pas chargé par le chemin de spring.factories comme spring.factories . ne chargera pas votre configuration



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow