Ricerca…


introduzione

In questo argomento vedrò una panoramica della scansione del pacchetto di avvio di primavera.

Puoi trovare alcune informazioni di base nei documenti di avvio di primavera nel seguente link ( using-boot-structuring-your-code ) ma cercherò di fornire informazioni più dettagliate.

Spring boot, e spring in generale, forniscono una funzionalità per scansionare automaticamente i pacchetti per determinate annotazioni al fine di creare beans e configuration .

Parametri

Annotazione Dettagli
@SpringBootApplication Annotazione dell'applicazione di avvio principale. utilizzato una sola volta nell'applicazione, contiene un metodo principale e funge da pacchetto principale per la scansione del pacchetto
@SpringBootConfiguration Indica che una classe fornisce un'applicazione Spring Boot. Dovrebbe essere dichiarato una sola volta nell'applicazione, solitamente automaticamente impostando @SpringBootApplication
@EnableAutoConfiguration Abilita la configurazione automatica del contesto dell'applicazione Spring. Dovrebbe essere dichiarato una sola volta nell'applicazione, solitamente automaticamente impostando @SpringBootApplication
@ComponentScan Utilizzato per attivare la scansione automatica dei pacchetti su un determinato pacchetto e relativi figli o per impostare la scansione dei pacchetti personalizzati
@Configurazione Utilizzato per dichiarare uno o più metodi @Bean . Può essere scelto dalla scansione automatica dei pacchetti per dichiarare uno o più metodi @Bean invece della tradizionale configurazione xml
@Fagiolo Indica che un metodo produce un bean che deve essere gestito dal contenitore Spring. Solitamente @Bean metodi annotati saranno posizionati in @Configuration classi annotate che verranno raccolti mediante scansione pacchetto per creare fagioli basati configurazione java.
@Componente Dichiarando una classe come @Component diventa un candidato per il rilevamento automatico quando si utilizzano la configurazione basata su annotazione e la scansione del percorso di classe. Di solito una classe annotata con @Component diventerà un bean nell'applicazione
@Repository Originariamente definito da Domain-Driven Design (Evans, 2003) come "un meccanismo per l'incapsulamento dello spazio di archiviazione." Solitamente viene usato per indicare un Repository per i spring data
@Servizio Molto simile in pratica a @Component . originariamente definito da Domain-Driven Design (Evans, 2003) come "un'operazione offerta come interfaccia che si trova da sola nel modello, senza stato incapsulato".
@Controller Indica che una classe annotata è un "Controller" (ad esempio un controller Web).
@RestController Un'annotazione di convenienza a sua volta annotata con @Controller e @ResponseBody . Viene selezionato automaticamente per impostazione predefinita poiché contiene l'annotazione @Controller che viene selezionata per impostazione predefinita.

@SpringBootApplication

Il modo più semplice per strutturare il codice utilizzando l'avvio a molla per una buona scansione automatica dei pacchetti è l'annotazione @SpringBootApplication . Questa annotazione fornisce di per sé altre 3 annotazioni utili per la scansione automatica: @SpringBootConfiguration , @EnableAutoConfiguration , @ComponentScan (ulteriori informazioni su ciascuna annotazione nella sezione Parameters ).

@SpringBootApplication verrà @SpringBootApplication inserito nel pacchetto principale e tutti gli altri componenti verranno inseriti in pacchetti sotto questo file:

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

Salvo diversa indicazione, spring boot rileva automaticamente le annotazioni @Configuration , @Component , @Repository , @Service , @Controller , @RestController sotto i pacchetti scansionati ( @Configuration e @RestController vengono selezionati perché sono annotati da @Component e @Controller conseguenza ).

Esempio di codice di base:

@SpringBootApplication
public class Application {

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

Impostazione di pacchetti / classi in modo esplicito

Dalla versione 1.3 è anche possibile indicare all'avvio di primavera di analizzare pacchetti specifici impostando scanBasePackages o scanBasePackageClasses in @SpringBootApplication invece di specificare @ComponentScan .

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - imposta com.example.myproject come pacchetto base da analizzare.
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - type-safe alternativa a scanBasePackages imposta il pacchetto di CustomerController.java , com.example.myproject.web , come pacchetto base da analizzare.

Esclusa la configurazione automatica

Un'altra caratteristica importante è la possibilità di escludere classi di configurazione automatica specifiche utilizzando exclude o excludeName ( excludeName esiste dalla versione 1.3 ).

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - esclude DemoConfiguration dalla scansione automatica dei pacchetti.
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - farà lo stesso usando il nome completamente classificato della classe.

@ComponentScan

È possibile utilizzare @ComponentScan per configurare una scansione dei pacchetti più complessa. C'è anche @ComponentScans che agisce come un'annotazione del contenitore che aggrega diverse annotazioni @ComponentScan .

Esempi di codice di base

@ComponentScan
public class DemoAutoConfiguration {
}

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

Dichiarando @ComponentScan senza alcuna configurazione si comporta come @SpringBootApplication e analizza tutti i pacchetti sotto la classe annotati con questa annotazione.

In questo esempio specificherò alcuni degli attributi utili di @ComponentScan :

  1. basePackages : può essere utilizzato per indicare pacchetti specifici da analizzare.
  2. useDefaultFilters - impostando questo attributo su false (default true) puoi assicurarti che spring non @Controller automaticamente la scansione di @Component , @Repository , @Service o @Controller .
  3. includeFilters - può essere usato per includere specifiche annotazioni a molla / modelli regex da includere nella scansione del pacchetto.
  4. excludeFilters - può essere usato per escludere specifiche annotazioni primaverili / regex da includere nella scansione del pacchetto.

Esistono molti altri attributi, ma quelli più comunemente usati per personalizzare la scansione dei pacchetti.

Creazione della propria configurazione automatica

L'avvio a molla si basa su molti progetti principali di autoconfigurazione automatica. Dovresti già avere familiarità con i progetti di avvio di avvio a molla.

Puoi facilmente creare il tuo progetto di avviamento seguendo i seguenti semplici passaggi:

  1. Creare alcune classi @Configuration per definire i bean predefiniti. Si consiglia di utilizzare le proprietà esterne, per quanto possibile per consentire la personalizzazione e provare a utilizzare le annotazioni helper di configurazione automatica come @AutoConfigureBefore , @AutoConfigureAfter , @ConditionalOnBean , @ConditionalOnMissingBean ecc È possibile trovare informazioni più dettagliate su ogni annotazione nella Gazzetta documentazione annotazioni Stato
  2. Inserire un file / file di configurazione automatica che aggrega tutte le classi @Configuration .
  3. Creare un file denominato spring.factories e posizionarlo in src/main/resources/META-INF .
  4. In spring.factories , impostare la proprietà org.springframework.boot.autoconfigure.EnableAutoConfiguration con valori separati da virgole delle classi @Configuration :
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

Usando questo metodo puoi creare le tue classi di configurazione automatica che verranno selezionate da spring-boot. Spring-boot scansiona automaticamente tutte le dipendenze maven / gradle per un file spring.factories , se ne trova uno, aggiunge tutte @Configuration classi @Configuration specificate in esso al suo processo di auto-configurazione.

Assicurati che il tuo progetto di avvio con auto-configuration non contenga spring boot maven plugin perché impacchetterà il progetto come un JAR eseguibile e non verrà caricato dal classpath come previsto - l'avvio a molla non sarà in grado di trovare i tuoi spring.factories e non caricherà la tua configurazione



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow