SpringBoot加載啟動的源碼解析
前言
@SpringBootApplication注解是Spring Boot的核心注解,它其實是一個組合注解:
- @Configuration(@SpringBootConfiguration點開查看發(fā)現(xiàn)里面還是應(yīng)用了@Configuration)
- @EnableAutoConfiguration
- @ComponentScan
即 @SpringBootApplication = (默認屬性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
所以,如果我們使用如下的SpringBoot啟動類,整個SpringBoot應(yīng)用依然可以與之前的啟動類功能對等:
@Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
1、@Configuration
這里的@Configuration對我們來說不陌生,它就是JavaConfig形式的Spring Ioc容器的配置類使用的那個@Configuration,SpringBoot社區(qū)推薦使用基于JavaConfig的配置形式,所以,這里的啟動類標注了@Configuration之后,本身其實也是一個IoC容器的配置類。
任何一個標注了@Configuration的Java類定義都是一個JavaConfig配置類。
任何一個標注了@Bean的方法,其返回值將作為一個bean定義注冊到Spring的IoC容器,方法名將默認成該bean定義的id。
@Configuration:提到@Configuration就要提到他的搭檔@Bean。使用這兩個注解就可以創(chuàng)建一個簡單的spring配置類,可以用來替代相應(yīng)的xml配置文件。
@Configuration的注解類標識這個類可以使用Spring IoC容器作為bean定義的來源。 @Bean注解告訴Spring,一個帶有@Bean的注解方法將返回一個對象,該對象應(yīng)該被注冊為在Spring應(yīng)用程序上下文中的bean。
2、@ComponentScan
@ComponentScan這個注解在Spring中很重要,它對應(yīng)XML配置中的元素,@ComponentScan的功能其實就是自動掃描并加載符合條件的組件(比如@Component和@Repository等)或者bean定義,最終將這些bean定義加載到IoC容器中。
我們可以通過basePackages等屬性來細粒度的定制@ComponentScan自動掃描的范圍,如果不指定,則默認Spring框架實現(xiàn)會從聲明@ComponentScan所在類的package進行掃描。
【注】:所以SpringBoot的啟動類最好是放在root package下,因為默認不指定basePackages
3、@EnableAutoConfiguration
- 個人感覺 @EnableAutoConfiguration這個Annotation最為重要,所以放在最后來解讀,大家是否還記得Spring框架提供的各種名字為@Enable開頭的Annotation定義?
- 比如@EnableScheduling、@EnableCaching、@EnableMBeanExport等
- @EnableAutoConfiguration的理念和做事方式其實一脈相承,簡單概括一下就是,借助@Import的支持,收集和注冊特定場景相關(guān)的bean定義。
- @EnableScheduling是通過@Import將Spring調(diào)度框架相關(guān)的bean定義都加載到IoC容器。
- @EnableMBeanExport是通過@Import將JMX相關(guān)的bean定義加載到IoC容器。
- 而@EnableAutoConfiguration也是借助@Import的幫助,將所有符合自動配置條件的bean定義加載到IoC容器,僅此而已!
4、總結(jié)
其實啟動的主要過程都在new SpringApplication().run();
- new SpringApplication():創(chuàng)建SpringApplication實例,負責加載配置一些基本的環(huán)境變量、資源、構(gòu)造器、監(jiān)聽器
- run():負責springboot整個啟動過程,包括加載創(chuàng)建環(huán)境、打印banner、配置文件、配置應(yīng)用上下文,加載bean等等sb整個生命周期幾乎都在run方法中;
到此這篇關(guān)于SpringBoot加載啟動的源碼解析的文章就介紹到這了,更多相關(guān)SpringBoot加載啟動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot項目打成War布署在Tomcat的詳細步驟
這篇文章主要介紹了SpringBoot項目打成War布署在Tomcat,本文分步驟結(jié)合圖文實例給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細版)
這篇文章主要介紹了Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細版)的相關(guān)資料,需要的朋友可以參考下2016-09-09SpringBoot+Quartz實現(xiàn)動態(tài)定時任務(wù)
這篇文章主要為大家詳細介紹了springBoot+Quartz實現(xiàn)動態(tài)定時任務(wù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09