首頁 > 軟體

SpringBoot核心@SpringBootApplication使用介紹

2022-03-21 13:01:11

@SpringBootApplication的使用

1. Spring Boot 的核心

1.1. 入口類和 @SpringBootApplication

Spring Boot的專案一般都會有*Application的入口類,入口類中會有main方法,這是一個標準的Java應用程式的入口方法。

@SpringBootApplication註解是Spring Boot的核心註解,它其實是一個組合註解: 

該註解主要組合了以下註解:

@SpringBootConfiguration:這是Spring Boot專案的設定註解,這也是一個組合註解:

在Spring Boot專案中推薦使用@ SpringBootConfiguration替代@Configuration

@EnableAutoConfiguration:啟用自動設定,該註解會使Spring Boot根據專案中依賴的jar包自動設定專案的設定項:

如:我們新增了spring-boot-starter-web的依賴,專案中也就會引入SpringMVC的依賴,Spring Boot就會自動設定tomcat和SpringMVC 

@ComponentScan:預設掃描@SpringBootApplication所在類的同級目錄以及它的子目錄。

1.2 關閉自動設定

通過上述,我們得知,Spring Boot會根據專案中的jar包依賴,自動做出設定,Spring Boot支援的自動設定如下(非常多):

如果我們不需要Spring Boot自動設定,想關閉某一項的自動設定,該如何設定呢?

比如: 我們不想自動設定 Redis ,想手動設定。

當然了,其他的設定就類似了

@SpringBootApplication及pom講解

@SpringBootApplication 主要有以下註解組成

@SpringBootConfiguration
@EnableAutoConfiguration

@SpringBootConfiguration

Spring Boot 設定類, 它本質上是@Configuration

@Configuration設定類註解,它本質上是一個元件@Component

@Configuration
public @interface SpringBootConfiguration {
@Component
public @interface Configuration {

@EnableAutoConfiguration 開啟自動設定功能

有了這個註解,以前我們需要自己設定的東西,現在都交由spring boot設定

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

1. @AutoConfigurationPackage

@Import({Registrar.class})
public @interface AutoConfigurationPackage {

在Registrar–>registerBeanDefinitions–>AutoConfigurationPackages.register中,如下圖:

獲得@SpringBootApplication 標註類的包名,並把該包下的所有元件掃描到spring容器中(在registerBeanDefinition中將物件放到beanDefinition中)

2. @Import({AutoConfigurationImportSelector.class})

Spring Boot啟動時從META-INF/spring.factories檔案中獲取EnableAutoConfiguration所指定的值,將這些值作為自動設定類匯入容器中,自動設定類就生效,幫我們進行自動設定工作。

Spring啟動器

spring-boot-starter-parent–>依賴於spring-boot-dependencies

Spring 的版本管理中心,我們匯入的包預設不需要寫版本(如果沒在dependencies裡管理的需要註明版本)

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.2.2.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
  </parent>

SpringBoot 場景啟動器

SpringBoot將所有的功能場景都抽取出來,做成Starters, 只需要在專案裡引入這些starter, 相關依賴都會導進來。要用什麼功能就匯入什麼場景的starter。

<!-- spring boot幫我們匯入web模組正常執行所依賴的元件: jason, spring-webmvc, spring-web等-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com