Spring Boot(2):SpringBootApplication註解

同步自個人我的博客墨語的後花園,請多多指教。java


這篇文章就來簡單的介紹出初始化建立Spring Boot程序的時候提供的兩個類級別的註解,一個是用於程序如口程序的@SpringBootAppliaction註解和用於測試使用的@SpringBootTest註解 ,還有就是關注一下SpringRunner類。app

@SpringBootAppliaction註解

首先咱們先來簡單的看一下他的源碼:測試

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class))
public @interface SpringBootApplication {
  
	Class<?>[] exclude() default {};

	String[] excludeName() default {};

	@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
	String[] scanBasePackages() default {};

	@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
	Class<?>[] scanBasePackageClasses() default {};

}

這份源代碼中有三個比較重要的類級別的註解,一個是@SpringBootConfiguration,這個註解代表這個是一個Spring Boot程序。第二個是一個@EnableAutoConfiguration註解,表示這個Spring Boot的程序是使用自動配置的,若是須要配置一些其餘的配置,則能夠在application.properties或application.yml中進行配置,Spring Boot會自動加載這些配置文件;在類中的還能夠引入其餘配置文件的方式另說。第三個是@ComponentScan註解,代表在這個文件的同級別的包之下的全部文件的註解都是能夠被發現的。code

接口中定義的方法中,有兩個方法是用來加載配置類的,這些配置類就是在application.properties中的內容,喜歡直接使用配置類的應該會喜歡這個方法的。剩下的兩個方法則是對於掃描類包的了,默認狀況下,只會掃描的同級別下全部的類包,可是若是有些類包不想被掃描到的話也可使用這個方法制定掃描的類包。繼承

@SpringBootTest註解

源代碼爲:教程

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(SpringBootTestContextBootstrapper.class)
public @interface SpringBootTest {
  // 詳細內容請看源碼
}

這裏只有一個類級別的註解須要關注,這就是@BootstrapWith註解,這個註解是告訴測試程序測試的入口,通常狀況下咱們使用Junit進行測試的時候,老是本身加載各類依賴,而使用這個註解則告訴了測試程序配置加載的位置,固然通常是加載默認的配置文件,也能夠加載自定義的文件。接口

而其中默認提供的SpringBootTestContextBootstrapper則是一個實現測試文件配置的加載,啓動入口以及基本的配置,這我麼能夠從其繼承鏈上看出來這是對TestContextBootstrapper的實現:圖片

SpringBootTestContextBootstrapper

SpringRunner

對於測試文件,若是常常看網上教程的人會發如今測試文件使用的時候使用@RunWith註解會發現使用的不是SpringRuuner.class,而是使用SpringJUnit4ClassRunner.class,這是是否是會認爲SpringRunner更增強大的呢。其實不是,SpringRunner集成了SpringJUnit4ClassRunner,其中就多了一個方法,就是:get

public SpringRunner(Class<?> clazz) throws InitializationError {
		super(clazz);
}

這實際上是一個構造器,就是將標準的Junit測試文件加載到TestContextManager中,固然了,既然使用了@RunWith註解了,在這個時候其中的內容SpringRuuner和SpringJUnit4ClassRunner是沒有多大區別的,可是在其餘狀況下仍是有區別的。同步

SpringApplication

這個類至關的有意思,在目前的狀況下咱們使用到的實際上是他的一個靜態類run,在源文件中,這個方法是一個重載方法,在之後咱們還可使用這個方法定義在系統加載的時候的參數,默認狀況下,這些參數和application.propreties中的沒有什麼不一樣,可是咱們能夠更加本身的須要進行添加,讓其加載個性化的參數。

相關文章
相關標籤/搜索