springboot初探---@SpringBootApplication註解
SpringBootApplication是springboot的基本註解,是寫在springboot的啟動類上的註解,目的是開啟springboot的自動配置
@SpringBootApplication是一個組合註解,先把原始碼貼出來
package org.springframework.boot.autoconfigure; @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 { @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 {}; }
在這裡可以看到這裡有7個註解
其中@Target(ElementType.TYPE)、@Retention(RetentionPolicy.RUNTIME)、@Documented、@Inherited這四個註解是Java原生的,用來標註這個註解的用法的這裡不再解釋。
重點是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan這三個註解
來一個一個分析
@ComponentScan,看到這個註解很容易想到spring配置裡的一個標籤
<context:component-scan base-package=""/>
看到這個標籤可能就明白了就是掃描指定包的,同理@ComponentScans註解是可以配置多個需要掃描的包
@EnableAutoConfiguration這個註解也是很常見的,這個註解的意思就是開啟自動配置
以上兩個註解配合,掃描到了包,然後開始自動配置。這兩個都是spring的註解,有spring功底的,應該理解起來不是問題
@SpringBootConfiguration不是spring原生的,但是點開原始碼就發現一個很神奇的事情
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
這就是@SpringBootConfiguration這個註解的全部程式碼,他只是用了下@Configuration註解。
綜上,springboot的啟動類不用@SpringBootApplication,而是@Configuration、@EnableAutoConfiguration、@ComponentScan,同樣能達到啟動的目的。@SpringBootApplication的目的只是為了簡化,讓開發人員少寫程式碼,實現相同的目標,這也算Java封裝思想的提現。
具體那三個註解有時間整理spring的時