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.myproject
jako pakiet podstawowy do skanowania. -
@SpringBootApplication(scanBasePackageClasses = CustomerController.class)
- bezpieczna dla typu alternatywa dlascanBasePackages
ustawia 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)
- wykluczyDemoConfiguration
ze 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
,@Service
lub@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@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 - Umieść plik / pliki autokonfiguracji, które agregują wszystkie klasy
@Configuration
. - Utwórz plik o nazwie
spring.factories
i umieść go wsrc/main/resources/META-INF
. - 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