亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot自動配置特點與原理是什么

發布時間:2022-08-17 10:38:03 來源:億速云 閱讀:112 作者:iii 欄目:開發技術

本篇內容介紹了“SpringBoot自動配置特點與原理是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    一、SpringBoot是什么

    Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。

    在Spring框架這個大家族中,產生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心內容在于控制反轉(IOC)和依賴注入(DI),所謂控制反轉并非是一種技術,而是一種思想,在操作方面是指在spring配置文件中創建<bean>,依賴注入即為由spring容器為應用程序的某個對象提供資源,比如 引用對象、常量數據等。

    在Spring框架這個大家族中,產生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心內容在于控制反轉(IOC)和依賴注入(DI),所謂控制反轉并非是一種技術,而是一種思想,在操作方面是指在spring配置文件中創建<bean>,依賴注入即為由spring容器為應用程序的某個對象提供資源,比如 引用對象、常量數據等。

    二、SpringBoot的特點(核心功能)

    • 可獨立運行的Spring項目:Spring Boot可以以jar包的形式獨立運行。

    • 內嵌的Servlet容器:Spring Boot可以選擇內嵌Tomcat、Jetty或者Undertow,無須以war包形式部署項目。

    • 簡化的Maven配置:Spring提供推薦的基礎 POM 文件來簡化Maven 配置。

    • 自動配置Spring:Spring Boot會根據項目依賴來自動配置Spring 框架,極大地減少項目要使用的配置。

    • 提供生產就緒型功能:提供可以直接在生產環境中使用的功能,如性能指標、應用信息和應用健康檢查。

    • 無代碼生成和xml配置:Spring Boot不生成代碼。完全不需要任何xml配置即可實現Spring的所有配置。

    SpringBoot最明顯的特點是,讓文件配置變的相當簡單、讓應用部署變的簡單(SpringBoot內置服務器,并裝備啟動類代碼),可以快速開啟一個Web容器進行開發。

    三、SpringBoot的自動配置原理

    Spring Boot的啟動類上有一個@SpringBootApplication注解,這個注解是Spring Boot項目必不可少的注解。

    1. @SpringBootApplication

    作用:SpringBoot的核心注解,標注在某個類上說明這個類是SpringBoot的主配置類 , SpringBoot就應該運行這個類的main方法來啟動SpringBoot應用

    @SpringBootApplication
    public class Springboot01Application {
        public static void main(String[] args) {
           SpringApplication.run(Springboot01Application.class, args);
        }
    }

    它的本質是一個組合注解,我們點進去查看該類的元信息主要包含3個注解:

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

    2. @SpringBootConfiguration

    作用:SpringBoot的配置類 ,標注在某個類上 , 表示這是一個SpringBoot的配置類;我們繼續進去這個注解查看源碼:

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

    @Configuration標注在某個類上,表示這是一個 springboot的配置類。可以向容器中注入組件。

    3. @EnableAutoConfiguration

    作用:開啟自動配置功能

    以前我們需要配置的東西,Spring Boot幫我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能;這樣自動配置才能生效;

    點進注解接續查看:

    @AutoConfigurationPackage
    @Import({AutoConfigurationImportSelector.class})
    public @interface EnableAutoConfiguration {

    @AutoConfigurationPackage:自動配置包

    @Import({AutoConfigurationImportSelector.class}):Spring底層注解@import , 給容器中導入一個組件,導入的組件由AutoConfigurationPackages.Registrar.class這個類來指定

    ①利用getAutoConfigurationEntry(annotationMetadata);給容器中批量導入一些組件;

    ②調用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)獲取到所有需要導入到容器中的配置類;

    ③利用工廠加載 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的組件;

    ④從META-INF/spring.factories位置來加載一個文件。默認掃描我們當前系統里面所有META-INF/spring.factories位置的文件。

    4. @ComponentScan

    作用:自動掃描組件,默認掃描該類所在包及其子包下所有帶有指定注解的類,將它們自動裝配到bean容器中,會被自動裝配的注解包括@Controller、@Service、@Component、@Repository等。也可以指定掃描路徑。

    四、核心原理圖

    SpringBoot自動配置特點與原理是什么

    簡單來說,Spring Boot通過@EnableAutoConfiguration注解開啟自動配置,對jar包下的spring.factories文件進行掃描,這個文件中包含了可以進行自動配置的類,當滿足@Condition注解指定的條件時,便在依賴的支持下進行實例化,注冊到Spring容器中。

    五、常用的Conditional注解

    在加載自動配置類的時候,并不是將spring.factories的配置全部加載進來,而是通過@Conditional等注解的判斷進行動態加載;

    @Conditional其實是spring底層注解,意思就是根據不同的條件,來進行自己不同的條件判斷,如果滿足指定的條件,那么配置類里邊的配置才會生效;

    常用的Conditional注解:

    @ConditionalOnClass : classpath中存在該類時起效

    @ConditionalOnMissingClass : classpath中不存在該類時起效

    @ConditionalOnBean : DI容器中存在該類型Bean時起效

    @ConditionalOnMissingBean : DI容器中不存在該類型Bean時起效

    @ConditionalOnSingleCandidate : DI容器中該類型Bean只有一個或@Primary的只有一個時起效

    @ConditionalOnExpression : SpEL表達式結果為true時

    @ConditionalOnProperty : 參數設置或者值一致時起效

    @ConditionalOnResource : 指定的文件存在時起效

    @ConditionalOnJndi : 指定的JNDI存在時起效

    @ConditionalOnJava : 指定的Java版本存在時起效

    @ConditionalOnWebApplication : Web應用環境下起效

    @ConditionalOnNotWebApplication : 非Web應用環境下起效

    “SpringBoot自動配置特點與原理是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    公主岭市| 黔东| 香港| 大同县| 内黄县| 富阳市| 克山县| 长白| 黄梅县| 二连浩特市| 呼玛县| 高雄市| 广汉市| 拜泉县| 伊川县| 米林县| 三江| 嘉祥县| 什邡市| 当雄县| 翼城县| 明光市| 鹤峰县| 自治县| 阿荣旗| 松阳县| 汝州市| 辽阳县| 绍兴县| 贡山| 平昌县| 济南市| 迁西县| 乐东| 宣威市| 湘潭县| 满洲里市| 阿图什市| 恩平市| 阿克| 枣庄市|