亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot?Application核心注解詳解

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

@SpringBootApplication

@SpringBootApplication 是一個“三體”結(jié)構(gòu),實際上它是一個復合 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}
)}
)

雖然它的定義使用了多個 Annotation 進行元信息標注,但實際上對于 SpringBoot 應用來說,重要的只有三個 Annotation,而“三體”結(jié)構(gòu)實際上指的就是這三個 Annotation:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

所以,如果我們使用如下的 SpringBoot 啟動類,整個 SpringBoot 應用依然可以與之前的啟動類功能對等:

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

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

@SpringBootConfiguration

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

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

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

所以,啟動類 SpringbootDemoApplication其實就是一個標準的 Standalone(單獨) 類型 Java 程序的 main 函數(shù)啟動類,沒有什么特殊的。而 @SpringBootConfiguration標注的 SpringbootDemoConfiguration 定義其實也是一個普通的 JavaConfig 形式的 IoC 容器配置類。

@EnableAutoConfiguration

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

@EnableAutoConfiguration 作為一個復合 Annotation,其自身定義關鍵信息如下:

@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 {};
}

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

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

@ComponentScan

@ComponentScan 是可有可無的

因為原則上來說,作為 Spring 框架里的“老一輩”,@ComponentScan 的功能其實就是自動掃描并加載符合條件的組件或 bean 定義,最終將這些 bean 定義加載到容器中。加載 bean 定義到 Spring 的 IoC 容器,我們可以手工單個注冊,不一定非要通過批量的自動掃描完成,所以說 @ComponentScan 是可有可無的。

對于 SpringBoot 應用來說,同樣如此,比如啟動類:

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

如果我們當前應用沒有任何 bean 定義需要通過 @ComponentScan 加載到當前 SpringBoot 應用對應使用的 IoC 容器,那么,除去 @ComponentScan 的聲明,當前 SpringBoot 應用依然可以照常運行,功能對等

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

相關文章

  • SpringMVC注解@RequestParam方法原理解析

    SpringMVC注解@RequestParam方法原理解析

    這篇文章主要介紹了SpringMVC注解@RequestParam方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • spring?security需求分析與基礎環(huán)境準備教程

    spring?security需求分析與基礎環(huán)境準備教程

    這篇文章主要為大家介紹了spring?security需求分析與基礎環(huán)境準備教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java8新特性:lambda表達式總結(jié)

    Java8新特性:lambda表達式總結(jié)

    這篇文章主要介紹了Java8新特性:lambda表達式總結(jié),本文總結(jié)了多種語法格式和使用方法,包含了函數(shù)式接口和內(nèi)置的四大核心函數(shù)式接口的用法實例,需要的朋友可以參考下
    2021-06-06
  • 解析Java中未被捕獲的異常以及try語句的嵌套使用

    解析Java中未被捕獲的異常以及try語句的嵌套使用

    這篇文章主要介紹了Java中未被捕獲的異常以及try語句的嵌套使用,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • SpringBoot整合WebSocket實現(xiàn)實時通信功能

    SpringBoot整合WebSocket實現(xiàn)實時通信功能

    在當今互聯(lián)網(wǎng)時代,實時通信已經(jīng)成為了許多應用程序的基本需求,而WebSocket作為一種全雙工通信協(xié)議,為開發(fā)者提供了一種簡單、高效的實時通信解決方案,本文將介紹如何使用SpringBoot框架來實現(xiàn)WebSocket的集成,快速搭建實時通信功能,感興趣的朋友可以參考下
    2023-11-11
  • Spring配置數(shù)據(jù)源流程與作用詳解

    Spring配置數(shù)據(jù)源流程與作用詳解

    這篇文章主要介紹了使用SpringBoot配置多數(shù)據(jù)源的經(jīng)驗分享,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • mybatis空值插入處理的解決方法

    mybatis空值插入處理的解決方法

    本文主要介紹了mybatis空值插入處理的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java語言描述Redis分布式鎖的正確實現(xiàn)方式

    java語言描述Redis分布式鎖的正確實現(xiàn)方式

    這篇文章主要介紹了java語言描述Redis分布式鎖的正確實現(xiàn)方式,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)

    mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)

    這篇文章主要介紹了mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • 聊聊Object類中的wait()和notify()方法

    聊聊Object類中的wait()和notify()方法

    這篇文章主要介紹了Object類中的wait()和notify()方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論