spring-boot
Analyse de paquet
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
.
-
@SpringBootApplication(scanBasePackages = "com.example.myproject")
: définitcom.example.myproject
comme package de base à analyser. -
@SpringBootApplication(scanBasePackageClasses = CustomerController.class)
- une alternative sécurisée àscanBasePackages
définit le package deCustomerController.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 ).
-
@SpringBootApplication(exclude = DemoConfiguration.class)
- excluraDemoConfiguration
de l'analyse automatique des packages. -
@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
:
- basePackages - peut être utilisé pour indiquer des packages spécifiques à analyser.
- 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
. - includeFilters - peut être utilisé pour inclure des annotations / motifs de regex de printemps spécifiques à inclure dans l'analyse des packages.
- 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:
- 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 . - Placez un fichier / fichier de configuration automatique qui regroupe toutes les classes
@Configuration
. - Créez un fichier nommé
spring.factories
et placez-le danssrc/main/resources/META-INF
. - 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