SpringBoot 啟動類中的1個核心注解
@SpringBootApplication
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.boot.autoconfigure;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;
@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 {};
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
可以看到一個@SpringBootApplication注解里已經包含了1.@SpringBootConfiguration 該注解主要是將當前類作為一個JavaConfig本質上和普通的@Configuration沒有區別
2.@ComponentScan,該注解會用於掃描Spring對應的組件,如果里面不設置值,則會默認從所在類的package進行掃描。所以一般啟動類都放在根package下
3.@EnableAutoConfiguration,該注解標識可以自動配置,把所有符合自動配置條件的Bean定義加載到IOC容器
SpringBoot啟動流程
1.當我們啟動SpringBoot的時候,先動用啟動類中的靜態run方法

2.run方法中最重要的兩個環節
a.創建 ApplicationContext容器
b.刷新 ApplicationContext容器
3.在刷新容器的時候會去解析啟動類,而啟動類的注解使用的是@SpringBootApplication,這是一個復合注解,里面包含了@ComponentScan,@EnableAutoConfiguration,@SpringBootConfiguration 這三個注解
4.三個注解中,@EnableAutoConfiguration會開啟自動配置,同時會去依賴的包中尋找spring.factories 文件,然后根據文件中配置的 Jar 包去掃描項目所依賴的 Jar 包。
5.將jar包中的自動配置類加到容器中並進行實例化,完成自動裝配。