欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot加載啟動(dòng)的源碼解析

 更新時(shí)間:2023年12月31日 08:49:46   作者:_Romeo  
這篇文章主要介紹了SpringBoot加載啟動(dòng)的源碼解析,@SpringBootApplication注解是Spring Boot的核心注解,它其實(shí)是一個(gè)組合注解,本身其實(shí)也是一個(gè)IoC容器的配置類,需要的朋友可以參考下

前言

@SpringBootApplication注解是Spring Boot的核心注解,它其實(shí)是一個(gè)組合注解:

在這里插入圖片描述

  • @Configuration(@SpringBootConfiguration點(diǎn)開查看發(fā)現(xiàn)里面還是應(yīng)用了@Configuration)
  • @EnableAutoConfiguration
  • @ComponentScan
    即 @SpringBootApplication = (默認(rèn)屬性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
    所以,如果我們使用如下的SpringBoot啟動(dòng)類,整個(gè)SpringBoot應(yīng)用依然可以與之前的啟動(dòng)類功能對(duì)等:
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
		}
}

1、@Configuration

這里的@Configuration對(duì)我們來說不陌生,它就是JavaConfig形式的Spring Ioc容器的配置類使用的那個(gè)@Configuration,SpringBoot社區(qū)推薦使用基于JavaConfig的配置形式,所以,這里的啟動(dòng)類標(biāo)注了@Configuration之后,本身其實(shí)也是一個(gè)IoC容器的配置類。

任何一個(gè)標(biāo)注了@Configuration的Java類定義都是一個(gè)JavaConfig配置類。

任何一個(gè)標(biāo)注了@Bean的方法,其返回值將作為一個(gè)bean定義注冊到Spring的IoC容器,方法名將默認(rèn)成該bean定義的id。

@Configuration:提到@Configuration就要提到他的搭檔@Bean。使用這兩個(gè)注解就可以創(chuàng)建一個(gè)簡單的spring配置類,可以用來替代相應(yīng)的xml配置文件。

@Configuration的注解類標(biāo)識(shí)這個(gè)類可以使用Spring IoC容器作為bean定義的來源。 @Bean注解告訴Spring,一個(gè)帶有@Bean的注解方法將返回一個(gè)對(duì)象,該對(duì)象應(yīng)該被注冊為在Spring應(yīng)用程序上下文中的bean。

2、@ComponentScan

@ComponentScan這個(gè)注解在Spring中很重要,它對(duì)應(yīng)XML配置中的元素,@ComponentScan的功能其實(shí)就是自動(dòng)掃描并加載符合條件的組件(比如@Component和@Repository等)或者bean定義,最終將這些bean定義加載到IoC容器中。

我們可以通過basePackages等屬性來細(xì)粒度的定制@ComponentScan自動(dòng)掃描的范圍,如果不指定,則默認(rèn)Spring框架實(shí)現(xiàn)會(huì)從聲明@ComponentScan所在類的package進(jìn)行掃描。

【注】:所以SpringBoot的啟動(dòng)類最好是放在root package下,因?yàn)槟J(rèn)不指定basePackages

3、@EnableAutoConfiguration

  • 個(gè)人感覺 @EnableAutoConfiguration這個(gè)Annotation最為重要,所以放在最后來解讀,大家是否還記得Spring框架提供的各種名字為@Enable開頭的Annotation定義?
  • 比如@EnableScheduling、@EnableCaching、@EnableMBeanExport等
  • @EnableAutoConfiguration的理念和做事方式其實(shí)一脈相承,簡單概括一下就是,借助@Import的支持,收集和注冊特定場景相關(guān)的bean定義。
  • @EnableScheduling是通過@Import將Spring調(diào)度框架相關(guān)的bean定義都加載到IoC容器。
  • @EnableMBeanExport是通過@Import將JMX相關(guān)的bean定義加載到IoC容器。
  • 而@EnableAutoConfiguration也是借助@Import的幫助,將所有符合自動(dòng)配置條件的bean定義加載到IoC容器,僅此而已!

4、總結(jié)

其實(shí)啟動(dòng)的主要過程都在new SpringApplication().run();

  • new SpringApplication():創(chuàng)建SpringApplication實(shí)例,負(fù)責(zé)加載配置一些基本的環(huán)境變量、資源、構(gòu)造器、監(jiān)聽器
  • run():負(fù)責(zé)springboot整個(gè)啟動(dòng)過程,包括加載創(chuàng)建環(huán)境、打印banner、配置文件、配置應(yīng)用上下文,加載bean等等sb整個(gè)生命周期幾乎都在run方法中;

到此這篇關(guān)于SpringBoot加載啟動(dòng)的源碼解析的文章就介紹到這了,更多相關(guān)SpringBoot加載啟動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java序列化與反序列化操作實(shí)例分析

    java序列化與反序列化操作實(shí)例分析

    這篇文章主要介紹了java序列化與反序列化操作,結(jié)合實(shí)例形式分析了java序列化與反序列化的概念與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • springBoot無法解析yml問題

    springBoot無法解析yml問題

    這篇文章主要介紹了springBoot無法解析yml問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java?策略模式?if-else用法實(shí)例詳解

    Java?策略模式?if-else用法實(shí)例詳解

    這篇文章主要介紹了Java?策略模式?if-else用法詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • SpringBoot項(xiàng)目打成War布署在Tomcat的詳細(xì)步驟

    SpringBoot項(xiàng)目打成War布署在Tomcat的詳細(xì)步驟

    這篇文章主要介紹了SpringBoot項(xiàng)目打成War布署在Tomcat,本文分步驟結(jié)合圖文實(shí)例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 深入解讀分布式事務(wù)Seata的XA模式

    深入解讀分布式事務(wù)Seata的XA模式

    這篇文章主要介紹了深入解讀分布式事務(wù)Seata的XA模式,XA 規(guī)范 描述了全局的事務(wù)管理器與局部的資源管理器之間的接口,XA規(guī)范 的目的是允許的多個(gè)資源在同一事務(wù)中訪問,這樣可以使 ACID 屬性跨越應(yīng)用程序而保持有效,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)簡易撲克牌游戲的完整實(shí)例

    Java實(shí)現(xiàn)簡易撲克牌游戲的完整實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)簡易撲克牌游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java語法之 Java 的多態(tài)、抽象類和接口

    Java語法之 Java 的多態(tài)、抽象類和接口

    上節(jié)介紹了 Java 基礎(chǔ)語法之解析 Java 的包和繼承,如果這類知識(shí)有點(diǎn)疑惑的小伙伴,可以去 Java 的包和繼承 這章看看,或許可以幫你解決一些疑惑喲!今天這篇文章我們將講解的是 Java 的多態(tài)、抽象類和接口,感興趣的小伙伴可以參考下面文章的具體內(nèi)容
    2021-09-09
  • 超全MyBatis動(dòng)態(tài)代理詳解(絕對(duì)干貨)

    超全MyBatis動(dòng)態(tài)代理詳解(絕對(duì)干貨)

    這篇文章主要介紹了超全MyBatis動(dòng)態(tài)代理詳解(絕對(duì)干貨),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)

    Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)

    這篇文章主要介紹了Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • SpringBoot+Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)

    SpringBoot+Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)

    這篇文章主要為大家詳細(xì)介紹了springBoot+Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09

最新評(píng)論