Szukaj…


Wprowadzenie

W tym temacie omówię skanowanie pakietu rozruchu wiosennego.

Możesz znaleźć podstawowe informacje w dokumentach rozruchu wiosennego w poniższym linku ( using-boot-structuring-your-code ), ale postaram się podać bardziej szczegółowe informacje.

Spring boot i ogólnie wiosna zapewniają funkcję automatycznego skanowania pakietów w poszukiwaniu określonych adnotacji w celu utworzenia beans i configuration .

Parametry

Adnotacja Detale
@SpringBootApplication Adnotacja głównej aplikacji rozruchu wiosennego. użyty jeden raz w aplikacji, zawiera główną metodę i działa jako główny pakiet do skanowania pakietów
@SpringBootConfiguration Wskazuje, że klasa udostępnia aplikację Spring Boot. Należy zadeklarować tylko raz w aplikacji, zwykle automatycznie, ustawiając @SpringBootApplication
@EnableAutoConfiguration Włącz automatyczną konfigurację kontekstu aplikacji wiosennej. Należy zadeklarować tylko raz w aplikacji, zwykle automatycznie, ustawiając @SpringBootApplication
@ComponentScan Służy do wyzwalania automatycznego skanowania paczki na określonym pakiecie i jego elementach potomnych lub do ustawiania niestandardowego skanowania pakietów
@Konfiguracja Służy do deklarowania jednej lub więcej metod @Bean . Może być wybrany przez automatyczne skanowanie pakietów w celu zadeklarowania jednej lub więcej metod @Bean zamiast tradycyjnej konfiguracji xml
@Fasola Wskazuje, że metoda produkuje fasolę do zarządzania przez kontener Spring. Zazwyczaj metody adnotacji @Bean będą umieszczane w @Configuration adnotacji @Configuration które będą wybierane przez skanowanie pakietów w celu utworzenia @Configuration bean opartych na konfiguracji Java.
@Składnik Deklarując klasę jako @Component , staje się ona kandydatem do automatycznego wykrywania przy użyciu konfiguracji opartej na adnotacjach i skanowaniu ścieżki klas. Zwykle klasa opatrzona adnotacją @Component staje się bean w aplikacji
@Magazyn Pierwotnie zdefiniowany przez Domain-Driven Design (Evans, 2003) jako „mechanizm enkapsulacji pamięci. Zwykle służy do wskazania Repository spring data
@Usługa Bardzo podobny w praktyce do @Component . pierwotnie zdefiniowany przez Domain-Driven Design (Evans, 2003) jako „operacja oferowana jako interfejs autonomiczny w modelu, bez stanu enkapsulacji”.
@Kontroler Wskazuje, że klasa z adnotacjami jest „kontrolerem” (np. Kontrolerem sieciowym).
@RestController Adnotacja dla wygody, która sama jest opatrzona adnotacjami @Controller i @ResponseBody . Zostanie automatycznie wybrany domyślnie, ponieważ zawiera adnotację @Controller która jest wybierana domyślnie.

@SpringBootApplication

Najbardziej podstawowym sposobem ustrukturyzowania kodu za pomocą Spring Boot dla dobrego automatycznego skanowania pakietów jest użycie adnotacji @SpringBootApplication . Adnotacja ta sama w sobie zapewnia 3 inne adnotacje, które pomagają w automatycznym skanowaniu: @SpringBootConfiguration , @EnableAutoConfiguration , @ComponentScan (więcej informacji o każdej adnotacji w sekcji Parameters ).

@SpringBootApplication będzie umieszczany w pakiecie głównym, a wszystkie inne komponenty będą umieszczane w pakietach w tym pliku:

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

O ile nie wspomniano inaczej, wiosenny rozruch wykrywa automatycznie adnotacje @Configuration , @Component , @Repository , @Service , @Controller , @RestController pod zeskanowanymi pakietami ( @Configuration i @RestController są wybierane, ponieważ są odpowiednio oznaczone przez @Component i @Controller ).

Przykład kodu podstawowego:

@SpringBootApplication
public class Application {

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

Wyraźne ustawianie pakietów / klas

Od wersji 1.3 możesz także nakazać wiosennemu rozruchowi, aby skanował określone pakiety, ustawiając scanBasePackages lub scanBasePackageClasses w @SpringBootApplication zamiast określania @ComponentScan .

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - ustaw com.example.myproject jako pakiet podstawowy do skanowania.
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - bezpieczna dla typu alternatywa dla scanBasePackages ustawia pakiet CustomerController.java , com.example.myproject.web , jako pakiet podstawowy do skanowania.

Z wyjątkiem automatycznej konfiguracji

Kolejną ważną funkcją jest możliwość wykluczenia określonych klas autokonfiguracji za pomocą exclude lub excludeName ( excludeName istnieje od wersji 1.3 ).

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - wykluczy DemoConfiguration ze automatycznego skanowania pakietów.
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - zrobi to samo, używając w pełni @SpringBootApplication(excludeName = "DemoConfiguration") nazwy klasy.

@ComponentScan

Możesz użyć @ComponentScan , aby skonfigurować bardziej złożone skanowanie pakietów. Istnieją również @ComponentScans które działają jak adnotacja kontenera, która agreguje kilka adnotacji @ComponentScan .

Podstawowe przykłady kodu

@ComponentScan
public class DemoAutoConfiguration {
}

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

@ComponentScan bez konfiguracji działa jak @SpringBootApplication i skanuje wszystkie pakiety w klasie opatrzone adnotacją.

W tym przykładzie przedstawię niektóre przydatne atrybuty @ComponentScan :

  1. basePackages - może służyć do określania konkretnych pakietów do skanowania.
  2. useDefaultFilters - ustawiając ten atrybut na false (domyślnie true), możesz upewnić się, że sprężyna nie skanuje automatycznie @Component , @Repository , @Service lub @Controller .
  3. includeFilters - może być użyty do włączenia określonych adnotacji sprężystych / wzorów wyrażeń regularnych, które mają zostać uwzględnione podczas skanowania pakietu.
  4. excludeFilters - może być użyty do wykluczenia określonych adnotacji wiosennych / wzorów wyrażeń regularnych, które mają zostać uwzględnione podczas skanowania pakietu.

Istnieje wiele innych atrybutów, ale są one najczęściej używane w celu dostosowania skanowania pakietów.

Tworzenie własnej automatycznej konfiguracji

Spring boot opiera się na wielu gotowych projektach nadrzędnych z automatyczną konfiguracją. Powinieneś już być zaznajomiony z projektami rozruchu wiosennego rozruchu.

Możesz łatwo stworzyć własny projekt startowy, wykonując następujące proste kroki:

  1. Utwórz niektóre klasy @Configuration , aby zdefiniować domyślne @Configuration bean. Powinieneś w miarę możliwości korzystać z właściwości zewnętrznych, aby umożliwić dostosowywanie i próbować używać adnotacji pomocnika automatycznej konfiguracji, takich jak @AutoConfigureBefore , @AutoConfigureAfter , @ConditionalOnBean , @ConditionalOnMissingBean itp. Więcej informacji na temat każdej adnotacji można znaleźć w oficjalnej dokumentacji Adnotacje warunkowe
  2. Umieść plik / pliki autokonfiguracji, które agregują wszystkie klasy @Configuration .
  3. Utwórz plik o nazwie spring.factories i umieść go w src/main/resources/META-INF .
  4. W spring.factories ustaw właściwość org.springframework.boot.autoconfigure.EnableAutoConfiguration z wartościami oddzielonymi przecinkami klas @Configuration :
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

Za pomocą tej metody możesz tworzyć własne klasy autokonfiguracji, które będą wybierane podczas rozruchu wiosennego. Spring-boot automatycznie skanuje wszystkie zależności maven / gradle w spring.factories pliku spring.factories , jeśli go znajdzie, dodaje wszystkie określone w nim klasy @Configuration do swojego procesu autokonfiguracji.

Upewnij się, że projekt startowy auto-configuration nie zawiera spring boot maven plugin Spring Boot spring.factories projekt jako plik wykonywalny JAR i nie zostanie załadowany spring.factories klas zgodnie z przeznaczeniem - Spring Boot nie będzie w stanie znaleźć twoich spring.factories i nie załaduje twojej konfiguracji



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow