spring-boot
Skanowanie paczki
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 .
-
@SpringBootApplication(scanBasePackages = "com.example.myproject")- ustawcom.example.myprojectjako pakiet podstawowy do skanowania. -
@SpringBootApplication(scanBasePackageClasses = CustomerController.class)- bezpieczna dla typu alternatywa dlascanBasePackagesustawia pakietCustomerController.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 ).
-
@SpringBootApplication(exclude = DemoConfiguration.class)- wykluczyDemoConfigurationze automatycznego skanowania pakietów. -
@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 :
- basePackages - może służyć do określania konkretnych pakietów do skanowania.
- useDefaultFilters - ustawiając ten atrybut na false (domyślnie true), możesz upewnić się, że sprężyna nie skanuje automatycznie
@Component,@Repository,@Servicelub@Controller. - 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.
- 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:
- Utwórz niektóre klasy
@Configuration, aby zdefiniować domyślne@Configurationbean. 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,@ConditionalOnMissingBeanitp. Więcej informacji na temat każdej adnotacji można znaleźć w oficjalnej dokumentacji Adnotacje warunkowe - Umieść plik / pliki autokonfiguracji, które agregują wszystkie klasy
@Configuration. - Utwórz plik o nazwie
spring.factoriesi umieść go wsrc/main/resources/META-INF. - W
spring.factoriesustaw właściwośćorg.springframework.boot.autoconfigure.EnableAutoConfigurationz 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