springboot初探---@SpringBootApplication註解

SpringBootApplication是springboot的基本註解,是寫在springboot的啓動類上的註解,目的是開啓springboot的自動配置java

@SpringBootApplication是一個組合註解,先把源碼貼出來spring

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個註解springboot

其中@Target(ElementType.TYPE)、@Retention(RetentionPolicy.RUNTIME)、@Documented、@Inherited這四個註解是Java原生的,用來標註這個註解的用法的這裏再也不解釋。code

重點是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan這三個註解component

來一個一個分析xml

@ComponentScan,看到這個註解很容易想到spring配置裏的一個標籤開發

<context:component-scan base-package=""/>

看到這個標籤可能就明白了就是掃描指定包的,同理@ComponentScans註解是能夠配置多個須要掃描的包get

@EnableAutoConfiguration這個註解也是很常見的,這個註解的意思就是開啓自動配置源碼

以上兩個註解配合,掃描到了包,而後開始自動配置。這兩個都是spring的註解,有spring功底的,應該理解起來不是問題it

@SpringBootConfiguration不是spring原生的,可是點開源碼就發現一個很神奇的事情

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

這就是@SpringBootConfiguration這個註解的所有代碼,他只是用了下@Configuration註解。

綜上,springboot的啓動類不用@SpringBootApplication,而是@Configuration、@EnableAutoConfiguration、@ComponentScan,一樣能達到啓動的目的。@SpringBootApplication的目的只是爲了簡化,讓開發人員少寫代碼,實現相同的目標,這也算Java封裝思想的提現。

具體那三個註解有時間整理spring的時候在詳細解釋。

相關文章
相關標籤/搜索