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 提供的新類。