Sök…


Introduktion

I det här ämnet kommer jag att övervaka vårens startpaketskanning.

Du kan hitta lite grundläggande information i vårens startdokument i följande länk ( använder-boot-strukturering-din-kod ) men jag kommer att försöka ge mer detaljerad information.

Vårstart, och våren i allmänhet, ger en funktion för att automatiskt skanna paket för vissa kommentarer för att skapa beans och configuration .

parametrar

Anteckning detaljer
@SpringBootApplication Huvudsakliga vårstartansökanotering. används en gång i applikationen, innehåller en huvudmetod och fungerar som huvudpaket för paketskanning
@SpringBootConfiguration Indikerar att en klass tillhandahåller Spring Boot-applikation. Bör deklareras endast en gång i applikationen, vanligtvis automatiskt genom att ställa in @SpringBootApplication
@EnableAutoConfiguration Aktivera autokonfiguration av Spring Application Context. Bör deklareras endast en gång i applikationen, vanligtvis automatiskt genom att ställa in @SpringBootApplication
@ComponentScan Används för att utlösa automatisk paketskanning på ett visst paket och dess barn eller för att ställa in anpassad paketskanning
@Konfiguration Används för att förklara en eller flera @Bean metoder. Kan väljas med automatisk paketskanning för att deklarera en eller flera @Bean metoder istället för traditionell xml-konfiguration
@Böna Indikerar att en metod producerar en böna som ska hanteras av vårbehållaren. Vanligtvis kommer @Bean kommenterade metoder att placeras i @Configuration kommenterade klasser som kommer att väljas genom paketskanning för att skapa java-konfigurationsbaserade bönor.
@Komponent Genom att deklarera en klass som @Component blir det kandidater för automatisk upptäckt när man använder annotationsbaserad konfiguration och klassvägsskanning. Vanligtvis blir en klass som är kommenterad med @Component en bean i applikationen
@Repository Ursprungligen definierades av Domain-Driven Design (Evans, 2003) som "en mekanism för kapsling av lagring. Det används vanligtvis för att indikera ett Repository för spring data
@Service Mycket lika i praktiken med @Component . ursprungligen definierades av Domain-Driven Design (Evans, 2003) som "en operation som erbjuds som ett gränssnitt som står ensam i modellen, utan inkapslat tillstånd."
@Kontrollant Indikerar att en kommenterad klass är en "Controller" (t.ex. en webbkontroller).
@RestController En bekvämhetsanteckning som i sig själv är kommenterad med @Controller och @ResponseBody . Väljs automatiskt som standard eftersom den innehåller @Controller kommentaren som @Controller som standard.

@SpringBootApplication

Det mest grundläggande sättet att strukturera din kod med vårstart för bra automatisk paketskanning är att använda @SpringBootApplication kommentarer. Den här anteckningen ger i sig 3 andra kommentarer som hjälper till med automatisk skanning: @SpringBootConfiguration , @EnableAutoConfiguration , @ComponentScan (mer information om varje annotation i avsnittet Parameters ).

@SpringBootApplication kommer vanligtvis att placeras i huvudpaketet och alla andra komponenter kommer att placeras i paket under denna fil:

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

Såvida inget annat anges, upptäcker @Configuration @Component , @Configuration , @Component , @Repository , @Service , @Controller @RestController kommentarer automatiskt under de skannade paketen ( @Configuration och @RestController eftersom de kommenteras av @Component och @Controller enlighet därmed ).

Exempel på grundläggande kod:

@SpringBootApplication
public class Application {

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

Ställer in paket / klasser uttryckligen

Sedan version 1.3 kan du också säga vårstart att skanna specifika paket genom att ställa scanBasePackages eller scanBasePackageClasses i @SpringBootApplication istället för att ange @ComponentScan .

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - ställ com.example.myproject som baspaketet som ska skannas.
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - typsäkert alternativ till scanBasePackages anger paketet med CustomerController.java , com.example.myproject.web , som baspaketet som ska skannas.

Exklusive autokonfiguration

En annan viktig funktion är möjligheten att utesluta specifika autokonfigureringsklasser med hjälp av exclude eller exclude excludeName ( excludeName finns sedan version 1.3 ).

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - kommer att utesluta DemoConfiguration från DemoConfiguration .
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - kommer att göra samma sak med klassificerat helt klassificerat namn.

@ComponentScan

Du kan använda @ComponentScan för att konfigurera mer komplex paketskanning. Det finns också @ComponentScans som fungerar som en containernotation som @ComponentScan flera @ComponentScan kommentarer.

Grundläggande kodexempel

@ComponentScan
public class DemoAutoConfiguration {
}

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

Att ange @ComponentScan utan konfiguration fungerar som @SpringBootApplication och skannar alla paket under klassen som kommenteras med den här kommentaren.

I det här exemplet kommer jag att ange några av de användbara attributen hos @ComponentScan :

  1. basePackages - kan användas för att ange specifika paket att skanna.
  2. useDefaultFilters - genom att ställa in detta attribut till falskt (standardinställningar sant) kan du se till att våren inte skannar @Component , @Repository , @Service eller @Controller automatiskt.
  3. includeFilters - kan användas för att inkludera specifika våranteckningar / regex-mönster som ska inkluderas i paketskanning.
  4. excludeFilters - kan användas för att utesluta specifika våranteckningar / regex-mönster som ska inkluderas i paketskanning.

Det finns många fler attribut men de är de vanligaste för att anpassa paketskanning.

Skapa din egen autokonfiguration

Spring boot är baserat på en hel del förberedda autokonfigurering av överordnade projekt. Du bör redan vara bekant med vårstartstartprojekt.

Du kan enkelt skapa ditt eget startprojekt genom att göra följande enkla steg:

  1. Skapa några @Configuration klasser för att definiera standardbönor. Du bör använda externa egenskaper så mycket som möjligt för att tillåta anpassning och försöka använda @AutoConfigureBefore som @AutoConfigureBefore , @AutoConfigureAfter , @ConditionalOnBean , @ConditionalOnMissingBean etc. Du kan hitta mer detaljerad information om varje kommentar i den officiella dokumentationen Villkoranteckningar
  2. Placera en autokonfigurationsfil / filer som sammanför alla @Configuration klasserna.
  3. Skapa en fil med namnet spring.factories och placera den i src/main/resources/META-INF .
  4. I spring.factories ställer du in org.springframework.boot.autoconfigure.EnableAutoConfiguration egenskapen med kommaseparerade värden för dina @Configuration klasser:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

Med den här metoden kan du skapa dina egna autokonfigurationsklasser som kommer att väljas av spring-boot. Spring-boot skannar automatiskt alla beroenden av maven / gradle för en spring.factories fil, om den hittar en lägger den till alla @Configuration klasser som anges i den till sin autokonfigurationsprocess.

Se till att din auto-configuration starter projekt inte innehåller spring boot maven plugin eftersom det kommer att paketera projektet som en körbar JAR och kommer inte att belastas av klassökvägen som avsett - våren boot kommer inte att kunna hitta dina spring.factories och laddar inte din konfiguration



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow