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

關(guān)于SpringBoot的spring.factories文件詳細(xì)說(shuō)明

 更新時(shí)間:2024年12月29日 08:50:39   作者:程序猿進(jìn)階  
spring.factories 文件是 Spring Boot 自動(dòng)配置機(jī)制的核心部分之一,它位于每個(gè) Spring Boot 自動(dòng)配置模塊的 META-INF 目錄下,經(jīng)常看到 spring.factories 文件,卻沒(méi)有對(duì)它進(jìn)行深入的了解和分析,今天我們就一起揭開(kāi)面紗看看它的內(nèi)在,需要的朋友可以參考下

前言

經(jīng)常看到 spring.factories 文件,卻沒(méi)有對(duì)它進(jìn)行深入的了解和分析,今天我們就一起揭開(kāi)面紗看看它的內(nèi)在。

spring.factories 文件是 Spring Boot 自動(dòng)配置機(jī)制的核心部分之一。它位于每個(gè) Spring Boot 自動(dòng)配置模塊的 META-INF 目錄下,用于聲明該模塊提供的自動(dòng)配置類(lèi)、條件性配置類(lèi)、環(huán)境后處理器等。以下是對(duì) spring.factories 文件的詳細(xì)說(shuō)明:

相信大家的項(xiàng)目中都會(huì)寫(xiě)starter,我們團(tuán)隊(duì)寫(xiě)的國(guó)際化通用和通用聚合服務(wù)等即插即用的功能包,就是用的starter。那么就會(huì)自己聲明spring.factories文件。

這是一種工廠加載機(jī)制(factory loading mechanism),也可說(shuō)成是SPI機(jī)制。原理分析在Spring SPI與Java SPI、Dubbo SPI

Spring Boot jar包下的spring.factories文件也聲明了一些組件,為方便我的闡述,我把它列在了附錄中。我會(huì)按照 介紹作用、初始化時(shí)機(jī) 去做分析。

一、基本結(jié)構(gòu)

spring.factories 文件是一個(gè)鍵值對(duì)的屬性文件,鍵和值之間用等號(hào)(=)分隔,多個(gè)值之間用逗號(hào)(,)分隔。文件內(nèi)容通常如下所示:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration,\
com.example.AnotherAutoConfiguration

org.springframework.boot.autoconfigure.condition.ConditionalOnClass=\
com.example.SomeClass

org.springframework.context.ApplicationListener=\
com.example.MyApplicationListener

二、常見(jiàn)的鍵

EnableAutoConfiguration

EnableAutoConfiguration 是最常見(jiàn)的鍵,用于聲明自動(dòng)配置類(lèi)。Spring Boot 會(huì)在啟動(dòng)時(shí)掃描這些類(lèi),并根據(jù)條件加載相應(yīng)的配置。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration,\
com.example.AnotherAutoConfiguration

AutoConfigurationImportListener

AutoConfigurationImportListener 用于聲明 AutoConfigurationImportListener 接口的實(shí)現(xiàn)類(lèi),這些類(lèi)可以在自動(dòng)配置類(lèi)導(dǎo)入之前或之后執(zhí)行一些邏輯。

org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
com.example.MyAutoConfigurationImportListener

AutoConfigurationImportFilter

AutoConfigurationImportFilter 用于聲明 AutoConfigurationImportFilter 接口的實(shí)現(xiàn)類(lèi),這些類(lèi)可以在自動(dòng)配置類(lèi)導(dǎo)入之前過(guò)濾掉一些不需要的配置類(lèi)。

org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
com.example.MyAutoConfigurationImportFilter

org.springframework.boot.env.PropertySourceLoader

策略接口,用于加載PropertySource(配置)。實(shí)現(xiàn)有PropertiesPropertySourceLoader、YamlPropertySourceLoader。

初始化時(shí)機(jī): 當(dāng)ConfigFileApplicationListener收到ApplicationEnvironmentPreparedEvent事件時(shí), 創(chuàng)建SourceLoader并執(zhí)行l(wèi)oad,加載配置。

org.springframework.boot.SpringApplicationRunListener

用于監(jiān)聽(tīng)spring boot啟動(dòng)并作出相應(yīng)處理。

Listener for the SpringApplication run method。

初始化時(shí)機(jī): 在SpringApplication啟動(dòng)時(shí)進(jìn)行初始化。

org.springframework.boot.SpringBootExceptionReporter

回調(diào)接口,用于對(duì)Spring Boot應(yīng)用啟動(dòng)失?。òl(fā)生異常)后,進(jìn)行異常播報(bào)的組件。

初始化時(shí)機(jī): 在SpringApplication啟動(dòng)時(shí)(創(chuàng)建完Application context后)進(jìn)行初始化。

org.springframework.context.ApplicationContextInitializer

用于在刷新之前初始化Spring ConfigurableApplicationContext的回調(diào)接口。比如,servlet web容器會(huì)用該組件設(shè)置一些額外的屬性。

初始化時(shí)機(jī): Spring Application構(gòu)造時(shí)創(chuàng)建。

org.springframework.context.ApplicationListener

用于監(jiān)聽(tīng)事件并作處理。

初始化時(shí)機(jī): Spring Application構(gòu)造時(shí)創(chuàng)建。

org.springframework.boot.env.EnvironmentPostProcessor

在context刷新前可對(duì)environment進(jìn)行修改的組件。

初始化時(shí)機(jī): 在run listener發(fā)出ApplicationEnvironmentPreparedEvent事件后觸發(fā)。

org.springframework.boot.diagnostics.FailureAnalyzer

分析錯(cuò)誤,展示給用戶(hù)診斷結(jié)果。

初始化時(shí)機(jī): 在SpringApplication啟動(dòng)時(shí)(創(chuàng)建完Application context后)進(jìn)行初始化。 伴隨一個(gè)SpringBootExceptionReporter(即org.springframework.boot.diagnostics.FailureAnalyzers) 的實(shí)例化而實(shí)例化。

org.springframework.boot.diagnostics.FailureAnalysisReporter

在錯(cuò)誤分析完成后,向用戶(hù)展示結(jié)果。(Spring Boot默認(rèn)實(shí)現(xiàn)是通過(guò)日志展示出來(lái))

初始化時(shí)機(jī): 在SpringApplication啟動(dòng)時(shí)(創(chuàng)建完Application context后)發(fā)生錯(cuò)誤的情況下進(jìn)行初始化。

spring boot包的spring.factories文件

# PropertySource Loaders
org.springframework.boot.env.PropertySourceLoader=\
org.springframework.boot.env.PropertiesPropertySourceLoader,\
org.springframework.boot.env.YamlPropertySourceLoader

# Run Listeners
org.springframework.boot.SpringApplicationRunListener=\
org.springframework.boot.context.event.EventPublishingRunListener

# Error Reporters
org.springframework.boot.SpringBootExceptionReporter=\
org.springframework.boot.diagnostics.FailureAnalyzers

# Application Context Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,\
org.springframework.boot.context.ContextIdApplicationContextInitializer,\
org.springframework.boot.context.config.DelegatingApplicationContextInitializer,\
org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.ClearCachesApplicationListener,\
org.springframework.boot.builder.ParentContextCloserApplicationListener,\
org.springframework.boot.context.FileEncodingApplicationListener,\
org.springframework.boot.context.config.AnsiOutputApplicationListener,\
org.springframework.boot.context.config.ConfigFileApplicationListener,\
org.springframework.boot.context.config.DelegatingApplicationListener,\
org.springframework.boot.context.logging.ClasspathLoggingApplicationListener,\
org.springframework.boot.context.logging.LoggingApplicationListener,\
org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener

# Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor,\
org.springframework.boot.env.SpringApplicationJsonEnvironmentPostProcessor,\
org.springframework.boot.env.SystemEnvironmentPropertySourceEnvironmentPostProcessor

# Failure Analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.boot.diagnostics.analyzer.BeanCurrentlyInCreationFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BeanDefinitionOverrideFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BeanNotOfRequiredTypeFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BindFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BindValidationFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.UnboundConfigurationPropertyFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.ConnectorStartFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.NoSuchMethodFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.NoUniqueBeanDefinitionFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.PortInUseFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyNameFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyValueFailureAnalyzer

# FailureAnalysisReporters
org.springframework.boot.diagnostics.FailureAnalysisReporter=\
org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter

三、自動(dòng)配置類(lèi)

以下是一個(gè)簡(jiǎn)單的自動(dòng)配置類(lèi)示例:

package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyAutoConfiguration {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

條件性自動(dòng)配置

package com.example.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnClass(name = "com.example.SomeClass")
public class MyAutoConfiguration {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

以上就是關(guān)于SpringBoot的spring.factories文件詳細(xì)說(shuō)明的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot spring.factories文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決Maven?build打包,類(lèi)找不到,找不到引用的那個(gè)項(xiàng)目里面的類(lèi)問(wèn)題

    解決Maven?build打包,類(lèi)找不到,找不到引用的那個(gè)項(xiàng)目里面的類(lèi)問(wèn)題

    文章討論了在使用Maven構(gòu)建項(xiàng)目時(shí)遇到類(lèi)找不到的問(wèn)題,并給出了解決方法,主要原因是公共項(xiàng)目被打成了可執(zhí)行的jar,導(dǎo)致其他項(xiàng)目無(wú)法引用其中的類(lèi),解決方法包括在公共項(xiàng)目的pom中將打包類(lèi)型改為普通jar,以及在主項(xiàng)目中正確引用公共項(xiàng)目
    2026-02-02
  • java雙重檢查鎖定的實(shí)現(xiàn)代碼

    java雙重檢查鎖定的實(shí)現(xiàn)代碼

    這篇文章主要介紹了java雙重檢查鎖定的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • SpringBoot中整合JodConverter實(shí)現(xiàn)文件在線預(yù)覽功能

    SpringBoot中整合JodConverter實(shí)現(xiàn)文件在線預(yù)覽功能

    Spring Boot JodConverter是一個(gè)基于Spring Boot框架的文檔轉(zhuǎn)換工具,它使用JodConverter庫(kù)來(lái)實(shí)現(xiàn)文檔格式之間的轉(zhuǎn)換,本文主要介紹了SpringBoot中整合JodConverter實(shí)現(xiàn)文件在線預(yù)覽功能,需要的朋友可以參考下
    2024-04-04
  • Spring中@Value設(shè)置默認(rèn)值問(wèn)題解決

    Spring中@Value設(shè)置默認(rèn)值問(wèn)題解決

    本文主要介紹了Spring中@Value設(shè)置默認(rèn)值問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java JUC并發(fā)集合詳解之線程安全容器完全攻略

    Java JUC并發(fā)集合詳解之線程安全容器完全攻略

    Java通過(guò)java.util.concurrent(JUC)包提供了一整套線程安全的并發(fā)容器,它們不僅是簡(jiǎn)單的同步包裝,更是基于精妙并發(fā)算法構(gòu)建的高性能工具,本文給大家介紹Java JUC并發(fā)集合詳解之線程安全容器完全攻略,感興趣的朋友一起看看吧
    2025-09-09
  • Java通過(guò)反射訪問(wèn)注解信息的方法示例

    Java通過(guò)反射訪問(wèn)注解信息的方法示例

    這篇文章主要介紹了Java通過(guò)反射訪問(wèn)注解信息的方法,結(jié)合實(shí)例形式分析了java基于反射訪問(wèn)類(lèi)成員方法注解信息的相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié)(推薦)

    IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié)(推薦)

    這篇文章主要介紹了IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié),非常不錯(cuò),具有參考價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java實(shí)現(xiàn)的求逆矩陣算法示例

    Java實(shí)現(xiàn)的求逆矩陣算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的求逆矩陣算法,涉及java基于數(shù)組的矩陣遍歷與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Java并發(fā)編程示例(七):守護(hù)線程的創(chuàng)建和運(yùn)行

    Java并發(fā)編程示例(七):守護(hù)線程的創(chuàng)建和運(yùn)行

    這篇文章主要介紹了Java并發(fā)編程示例(七):守護(hù)線程的創(chuàng)建和運(yùn)行,在本節(jié)示例中,我們將創(chuàng)建兩個(gè)線程,一個(gè)是普通線程,向隊(duì)列中寫(xiě)入事件,另外一個(gè)是守護(hù)線程,清除隊(duì)列中的事件,需要的朋友可以參考下
    2014-12-12
  • 如何基于SpringBoot部署外部Tomcat過(guò)程解析

    如何基于SpringBoot部署外部Tomcat過(guò)程解析

    這篇文章主要介紹了SpringBoot以war包形式部署到外部Tomcat過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

朝阳区| 张家港市| 民勤县| 来安县| 茂名市| 克什克腾旗| 青河县| 阜阳市| 云龙县| 句容市| 淮滨县| 万全县| 南汇区| 颍上县| 包头市| 沐川县| 株洲市| 紫阳县| 洪泽县| 阳曲县| 五家渠市| 长乐市| 福建省| 什邡市| 沅陵县| 临漳县| 卓资县| 永新县| 永寿县| 邯郸市| 佛山市| 江达县| 丰原市| 苏尼特左旗| 玛沁县| 长岛县| 蓬安县| 南安市| 都江堰市| 雷波县| 雷山县|