SpringApplication.run() 做了兩件事情。
1. 判斷當前項目類型,web類型。
2. 初始化Spring中的ApplicationContext的初始化器,去classpath下的META-INF/spring.factories中尋找並創建對象。
3. 創建Spring的IOC容器。
@SpringBootApplication註解:
@SpringBootConfiguration:聲明一個配置類
@ComponentScan:聲明掃描包
@EnableAutoConfiguration:聲明啓用自動配置
@EnableAutoConfiguration的原理:
1、會加載classpath下的META-INF/spring.factories文件,並且獲取其中以EnableAutoConfiguration爲key的所有的自動配置類。
2、這些配置類中,通過@Bean註解,已經完成了幾乎所有的配置,因此我們大多數情況下,無需再配置了。
3、自動配置類雖然都加載了,但是不一定生效,因爲類都有@ConditionalOn的註解,只有滿足一定的條件,自動配置纔會生效。比如說:指定的一些類必須存在
4、也可以覆蓋自動配置,因爲默認配置的@Bean上,都有@ConditionalOnMissBean註解,如果我們配置了同一個Bean,那麼自動配置的Bean就失效了!
5、可以只覆蓋Bean的部分屬性,因爲默認配置的一些屬性,是通過讀取application.yml文件中的屬性來獲取的。因此我們只要修改了application.yml文件,即可覆蓋這部分屬性。