@SpringBootApplication註解是加在項目啓動類上的。@SpringBootApplication實際上是一個組合註解,定義如下:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
......
}
這個註解是由3個註解組成的。
1、第一個是@SpringBootConfiguration,它的定義如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
原來就是一個@Configuration,所以@SpringBootConfiguration的功能就是表明這是一個配置類,開發者可以在這個類中配置Bean。從這個角度來講,這個類所扮演的角色有點類似於Spring中的applicationContext.xml文件的角色。
2、第二個註解是@EnableAutoConfiguration ,表示開啓自動化配置。SpringBoot中的自動化配置是非入侵式的,在任意時刻,開發者都可以使用自定義配置代替自動化配置中的某一個配置。
3、第三個註解@ComponentScan ,完成包的掃描,也是Spring中的功能。由於@ComponentScan註解默認掃描的類都位於類所在包的下面,因此建議在實際項目開發中把項目啓動類放在根包中。如下圖所示:
雖然項目的啓動類也包含@Configuration註解,但是開發者可以創建一個新的類專門用來配置Bean,這樣便於配置的管理。這個類只需要加上@Configuration註解即可。代碼如下:
package com.learn;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig {
}
項目啓動類中的@ComponentScan註解,除了掃描@Service、@Repository、@Component、@Controller和@RestController等之外,也會掃描@Configuration註解的類。