日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EnableAutoConfiguration自动配置底层原理

發布時間:2024/4/13 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EnableAutoConfiguration自动配置底层原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在spring框架中就提供了各種以@Enable開頭的注解,例如: @EnableScheduling、@EnableCaching、@EnableMBeanExport等; @EnableAutoConfiguration的理念和做事方式其實一脈相承簡單概括一下就是,借助@Import的支持,收集和注冊特定場景相關的bean定義。 

舉例:

  • @EnableScheduling是通過@Import將Spring調度框架相關的bean定義都加載到IoC容器【定時任務、時間調度任務】
  • @EnableMBeanExport是通過@Import將JMX相關的bean定義加載到IoC容器【監控JVM運行時狀態】
@SuppressWarnings("deprecation") @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage【重點注解】 @Import(AutoConfigurationImportSelector.class)【重點注解】 public @interface EnableAutoConfiguration { ... }

其中最重要的兩個注解已經標注:1、@AutoConfigurationPackage?2、@Import(AutoConfigurationImportSelector.class)

當然還有其中比較重要的一個類就是:EnableAutoConfigurationImportSelector.class

1、@AutoConfigurationPackage**

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited@Import(AutoConfigurationPackages.Registrar.class) public @interface AutoConfigurationPackage {}

@Import(AutoConfigurationPackages.Registrar.class)

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {@Overridepublic void registerBeanDefinitions(AnnotationMetadata metadata,BeanDefinitionRegistry registry) {register(registry, new PackageImport(metadata).getPackageName());}……}

它其實是注冊了一個Bean的定義;

new PackageImport(metadata).getPackageName(),它其實返回了當前主程序類的同級以及子級的包組件(重點);這也就是為什么,我們要把DemoApplication放在項目的最高級中。這就是約定大于配置

2. @Import({AutoConfigurationImportSelector.class})

EnableAutoConfigurationImportSelector:導入哪些組件的選擇器;
將所有需要導入的組件以全類名的方式返回;這些組件就會被添加到容器中;
會給容器中導入非常多的自動配置類(xxxAutoConfiguration);就是給容器中導入這個場景需要的所有組件,并配置好這些組件;有很多配置了@AutoConfiguration才會被自動導入

Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導入到容器中,自動配置類就生效,幫我們進行自動配置工作;以前我們需要自己配置的東西,自動配置類都幫我們;自動配置器會跟根據傳入的factoryClass.getName()到項目系統路徑下所有的spring.factories文件中找到相應的key,從而加載里面的類。

自動配置幕后英雄:SpringFactoriesLoader詳解

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

SpringFactoriesLoader屬于Spring框架私有的一種擴展方案,其主要功能就是從指定的配置文件META-INF/spring.factories加載配置,加載工廠類。

就是解耦了,不再是源代碼寫死的了,而是從classpath中搜尋所有的META-INF /spring.factories配置文件,并將其中org.springframework.boot.autoconfigure. EnableAutoConfiguration對應的配置項通過反射(Java Refletion)實例化為對應的標注了@Configuration的JavaConfig形式的IoC容器配置類,然后匯總為一個并加載到IoC容器。
?

總結

以上是生活随笔為你收集整理的EnableAutoConfiguration自动配置底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。