Spring註解 中 @SpringBootApplication 部分源代碼

我們看一下放置在下面的源碼:

@Target(ElementType.TYPE)   //指定在何處寫入註釋的合法位置
@Retention(RetentionPolicy.RUNTIME)  //RetentionPolicy這個枚舉類型的常量描述保留註釋的各種策略,它們與元註釋(@Retention)一起指定註釋要保留多長時間
@Documented    //表明這個註釋是由 javadoc記錄的,在默認情況下也有類似的記錄工具。 如果一個類型聲明被註釋了文檔化,它的註釋成爲公共API的一部分。
@Inherited     //它指明被註解的類會自動繼承
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),    //掃描器
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })     //掃描器的過濾方式
public @interface SpringBootApplication {

	@AliasFor(annotation = EnableAutoConfiguration.class)
	Class<?>[] exclude() default {};


	@AliasFor(annotation = EnableAutoConfiguration.class)
	String[] excludeName() default {};


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

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

}

由此可知:

@SpringBootApplication 註解,其實主要是 @ComponentScan@EnableAutoConfiguration@SpringBootConfiguration 三個註解

一般我們在spring boot項目中會使用@SpringBootApplication註解,因爲它可以做到自動配置,組件類掃描和定義額外的配置類,也就是說一個註解可以達到三種效果,而這三種效果又相當於三個註解的作用,這三個等價註解分別是:
(1)@EnableAutoConfiguration:自動裝配依賴
(2)@ComponentScan:在應用程序所在的包上啓用@component 的掃描
(3)@Configuration:允許在上下文中註冊額外的Bean,或者引入額外的配置類

因此@SpringBootApplication註解相當於@EnableAutoConfiguration@ComponentScan@Configuration註解的綜合效果。

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