最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot?Application核心注解詳解

 更新時(shí)間:2022年10月27日 08:50:29   作者:沫洺  
進(jìn)入到@SpringBootApplication的源碼,可以看到里面組合了三個(gè)我們感興趣的注解@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration,我們一一分析這三個(gè)注解

@SpringBootApplication

@SpringBootApplication 是一個(gè)“三體”結(jié)構(gòu),實(shí)際上它是一個(gè)復(fù)合 Annotation:

?

@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}
)}
)

雖然它的定義使用了多個(gè) Annotation 進(jìn)行元信息標(biāo)注,但實(shí)際上對(duì)于 SpringBoot 應(yīng)用來(lái)說(shuō),重要的只有三個(gè) Annotation,而“三體”結(jié)構(gòu)實(shí)際上指的就是這三個(gè) Annotation:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

所以,如果我們使用如下的 SpringBoot 啟動(dòng)類,整個(gè) SpringBoot 應(yīng)用依然可以與之前的啟動(dòng)類功能對(duì)等:

//@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class SpringbootDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }
}

但每次都寫三個(gè) Annotation 顯然過(guò)于繁瑣,所以寫一個(gè) @SpringBootApplication 這樣的一站式復(fù)合 Annotation 顯然更方便些。

@SpringBootConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

這里的 @Configuration 對(duì)我們來(lái)說(shuō)并不陌生,它就是 JavaConfig 形式的 Spring IoC 容器的配置類使用的那個(gè) @Configuration,既然 SpringBoot 應(yīng)用骨子里就是一個(gè) Spring 應(yīng)用,那么,自然也需要加載某個(gè) IoC 容器的配置,而 SpringBoot 社區(qū)推薦使用基于 JavaConfig 的配置形式,所以,很明顯,這里的啟動(dòng)類標(biāo)注了 @SpringBootConfiguration 之后,本身其實(shí)也是一個(gè) IoC 容器的配置類!很多 SpringBoot 的代碼示例都喜歡在啟動(dòng)類上直接標(biāo)注 @SpringBootConfiguration或者 @SpringBootApplication,對(duì)于初接觸 SpringBoot 的開(kāi)發(fā)者來(lái)說(shuō),其實(shí)這種做法不便于理解,如果我們將上面的 SpringBoot 啟動(dòng)類拆分為兩個(gè)獨(dú)立的 Java 類,整個(gè)形勢(shì)就明朗了:

// 配置類
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class SpringbootDemoConfiguration {
   public SpringbootDemoConfiguration(){} 
}
//運(yùn)行類
public class SpringbootDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoConfiguration.class, args);
    }
}

所以,啟動(dòng)類 SpringbootDemoApplication其實(shí)就是一個(gè)標(biāo)準(zhǔn)的 Standalone(單獨(dú)) 類型 Java 程序的 main 函數(shù)啟動(dòng)類,沒(méi)有什么特殊的。而 @SpringBootConfiguration標(biāo)注的 SpringbootDemoConfiguration 定義其實(shí)也是一個(gè)普通的 JavaConfig 形式的 IoC 容器配置類。

@EnableAutoConfiguration

是借助 @Import 的幫助,將所有符合自動(dòng)配置條件的 bean 定義加載到 IoC 容器,僅此而已!

@EnableAutoConfiguration 作為一個(gè)復(fù)合 Annotation,其自身定義關(guān)鍵信息如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
    Class<?>[] exclude() default {};
    String[] excludeName() default {};
}

其中,最關(guān)鍵的要屬 @Import(AutoConfigurationImportSelector.class}),借助 AutoConfigurationImportSelector,@EnableAutoConfiguration 可以幫助 SpringBoot 應(yīng)用將所有符合條件的 @SpringBootConfiguration配置都加載到當(dāng)前 SpringBoot 創(chuàng)建并使用的 IoC 容器.

借助于 Spring 框架原有的一個(gè)工具類:SpringFactoriesLoader 的支持,@EnableAutoConfiguration 可以“智能”地自動(dòng)配置功效才得以大功告成

@ComponentScan

@ComponentScan 是可有可無(wú)的

因?yàn)樵瓌t上來(lái)說(shuō),作為 Spring 框架里的“老一輩”,@ComponentScan 的功能其實(shí)就是自動(dòng)掃描并加載符合條件的組件或 bean 定義,最終將這些 bean 定義加載到容器中。加載 bean 定義到 Spring 的 IoC 容器,我們可以手工單個(gè)注冊(cè),不一定非要通過(guò)批量的自動(dòng)掃描完成,所以說(shuō) @ComponentScan 是可有可無(wú)的。

對(duì)于 SpringBoot 應(yīng)用來(lái)說(shuō),同樣如此,比如啟動(dòng)類:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class SpringbootDemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(SpringbootDemoApplication.class, args);
   }
}

如果我們當(dāng)前應(yīng)用沒(méi)有任何 bean 定義需要通過(guò) @ComponentScan 加載到當(dāng)前 SpringBoot 應(yīng)用對(duì)應(yīng)使用的 IoC 容器,那么,除去 @ComponentScan 的聲明,當(dāng)前 SpringBoot 應(yīng)用依然可以照常運(yùn)行,功能對(duì)等

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

相關(guān)文章

  • springMVC導(dǎo)出word模板的方法

    springMVC導(dǎo)出word模板的方法

    這篇文章主要為大家詳細(xì)介紹了springMVC導(dǎo)出word模板的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • java實(shí)現(xiàn)線性表及其算法

    java實(shí)現(xiàn)線性表及其算法

    線性表是最簡(jiǎn)單和最常用的一種數(shù)據(jù)結(jié)構(gòu),它是有n個(gè)體數(shù)據(jù)元素(節(jié)點(diǎn))組成的有限序列,這篇文章主要介紹了java實(shí)現(xiàn)線性表及其算法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • java substring(a)與substring(a,b)的使用說(shuō)明

    java substring(a)與substring(a,b)的使用說(shuō)明

    這篇文章主要介紹了java substring(a)與substring(a,b)的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • MyBatis框架迭代器模式實(shí)現(xiàn)原理解析

    MyBatis框架迭代器模式實(shí)現(xiàn)原理解析

    這篇文章主要介紹了MyBatis框架迭代器模式實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot整合Ip2region獲取IP地址和定位的詳細(xì)過(guò)程

    SpringBoot整合Ip2region獲取IP地址和定位的詳細(xì)過(guò)程

    ip2region v2.0 - 是一個(gè)離線IP地址定位庫(kù)和IP定位數(shù)據(jù)管理框架,10微秒級(jí)別的查詢效率,提供了眾多主流編程語(yǔ)言的 xdb 數(shù)據(jù)生成和查詢客戶端實(shí)現(xiàn) ,這篇文章主要介紹了SpringBoot整合Ip2region獲取IP地址和定位,需要的朋友可以參考下
    2023-06-06
  • Java SSH 秘鑰連接mysql數(shù)據(jù)庫(kù)的方法

    Java SSH 秘鑰連接mysql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了Java SSH 秘鑰連接mysql數(shù)據(jù)庫(kù)的方法,包括引入依賴的代碼和出現(xiàn)異常報(bào)錯(cuò)問(wèn)題,需要的朋友可以參考下
    2021-06-06
  • Kotlin基礎(chǔ)教程之操作符與操作符重載

    Kotlin基礎(chǔ)教程之操作符與操作符重載

    這篇文章主要介紹了Kotlin基礎(chǔ)教程之操作符與操作符重載的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 詳細(xì)解析Java中抽象類和接口的區(qū)別

    詳細(xì)解析Java中抽象類和接口的區(qū)別

    這篇文章主要介紹了Java中抽象類和接口的區(qū)別詳解,需要的朋友可以參考下
    2014-10-10
  • java中xml和對(duì)象之間的互相轉(zhuǎn)換方法

    java中xml和對(duì)象之間的互相轉(zhuǎn)換方法

    在java開(kāi)發(fā)中我們經(jīng)常會(huì)遇到Xml與對(duì)象互相轉(zhuǎn)換的情況,這篇文章主要給大家介紹了關(guān)于java中xml和對(duì)象之間的互相轉(zhuǎn)換方法,文中給出了兩種解決方法,需要的朋友可以參考下
    2023-06-06
  • Servlet實(shí)現(xiàn)統(tǒng)計(jì)頁(yè)面訪問(wèn)次數(shù)功能

    Servlet實(shí)現(xiàn)統(tǒng)計(jì)頁(yè)面訪問(wèn)次數(shù)功能

    這篇文章主要介紹了Servlet實(shí)現(xiàn)統(tǒng)計(jì)頁(yè)面訪問(wèn)次數(shù)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評(píng)論

焉耆| 上蔡县| 江达县| 高密市| 南京市| 休宁县| 沂南县| 闽清县| 鄂尔多斯市| 海口市| 汽车| 临沧市| 大港区| 金沙县| 孙吴县| 曲水县| 将乐县| 屯昌县| 万源市| 安泽县| 高碑店市| 阿瓦提县| 来宾市| 永寿县| 溆浦县| 石楼县| 秦皇岛市| 明水县| 达尔| 新乡县| 廉江市| 桓仁| 伽师县| 六安市| 邻水| 休宁县| 高碑店市| 鄂尔多斯市| 台中县| 鄯善县| 冀州市|