說說 Spring Boot 項目引導與測試原理

1 引導項目

因爲 Spring Boot 項目會以可執行 JAR 文件的形式來運行,所以 Spring Boot 項目會定義一個主類,主類中提供 main 方法,它會在 JAR 運行時被執行。這個主類以註解的形式綁定 Spring 框架,完成 Spring 基礎配置。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DeniroSpring5Application {

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

}

@SpringBootApplication 註解表明這是一個 SpringBoot 應用項目。

@SpringBootApplication 註解實際上是一個組合註解:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
  ...
}
註解 說明
@SpringBootConfiguration 將該類聲明爲配置類,是 @Configuration 註解的特殊形式 。
@EnableAutoConfiguration 啓用 Spring Boot的自動配置
@ComponentScan 啓用組件掃描。這樣配置了 @Component、@Controller、@Service 等註解的類,就會被 Spring 掃描到,然後將其註冊爲 Spring 上下文中的組件。

這裏也順便回顧下 Java 的元註解:

註解 說明
@Documented 把註解類型信息記錄到 生成的 javadoc 文檔中。
@Target(ElementType.TYPE) 說明了Annotation所修飾的對象範圍,TYPE 表示用於描述類、接口(包括註解類型) 或enum聲明。
@Retention(RetentionPolicy.RUNTIME) 指定註解的生命週期,RetentionPolicy.RUNTIME 表示註解不僅被保存到class文件中,jvm加載class文件之後,仍然存在。
@Inherited 如果該註解定義在類上面時,子類會自動繼承此註解。該註解只有在類上使用時纔會有效。

主類中的 main 方法,調用 SpringApplication.run(DeniroSpring5Application.class, args); 執行項目引導過程,也就是創建 Spring 的應用上下文。靜態的 run() 方法有兩個入參,一個是配置類,另一個是命令行參數。

2 測試項目

Spring Initializr 在創建項目的同時,爲我們提供了一個基本測試類:

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DeniroSpring5ApplicationTests {

    @Test
    void contextLoads() {
    }

}

運行結果:

這個類中只有一個空的測試方法,雖然是空的,但會確保 Spring 應用上下文能夠被正確加載。如果我們所做的修改導致 無法創建 Spring 應用上下文,那麼這個測試方法就會失敗。

這裏使用了 org.junit.jupiter.api.Test 作爲測試依賴類,這個類是 Junit 5 提供的新類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章