本文主要是介绍关于SpringBoot的spring.factories文件详细说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《关于SpringBoot的spring.factories文件详细说明》spring.factories文件是SpringBoot自动配置机制的核心部分之一,它位于每个SpringBoot自动配置模...
前言
经常看到 spring.factories 文件,却没有对它进行深入的了解和分析,今天我们就一起揭开面纱看看它的内在。
spring.factories 文件是 Spring Boot 自动配置机制的核心部分之一。它位于每个 Spring Boot 自动配置模块的 META-INF 目录下,用于声明该模块提供的自动配置类、条件性配置类、环境后处理器等。以下是对 spring.factories 文件的详细说明:
相信大家的项目中都会写starter,我们团队写的国际化通用和通用聚合服务等即插即用的功能包,就是用的starter。那么就会自己声明spring.factories文件。
这是一种工厂加载机制(factory loading mechanism),也可说成是SPI机制。原理分析在Spring SPI与Java SPI、Dubbo SPI
Spring Boot jar包下的spring.factories文件也声明了一些组件,为方便我的阐述,我把它列在了附录中。我会按照 介绍作用、初始化时机 去做分析。
一、基本结构
spring.factories 文件是一个键值对的属性文件,键和值之间用等号(=)分隔,多个值之间用逗号(,)分隔。文件内容通常如下所示:
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
二、常见的键
EnableAutoConfiguration
EnableAutoConfiguration 是最常见的键,用于声明自动配置类。Spring Boot 会在启动时扫描这些类,并根据条件加载相应的配置。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.MyAutoConfiguration,\ com.example.AnotherAutoConfiguration
AutoConfigurationImportListener
AutoConfigurationImportListener 用于声明 AutoConfigurationImportListener 接口的实现类,这些类可以在自动配置类导入之前或之后执行一些逻辑。
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\ com.example.MyAutoConfigurationImportListener
AutoConfigurationImportFilter
AutoConfigurationImportFilter 用于声明 AutoConfigurationImportFilter 接口的实现类,这些类可以在自动配置类导入之前过滤掉一些不需要的配置类。
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\ com.example.MyAutoConfigurationImportFilter
org.springframework.boot.env.PropertySourceLoader
策略接口,用于加载PropertySource(配置)。实现有PropertiesPropertySourceLoader、YamlPropertySourceLoader。
初始化时机: 当ConfigFileApplicationListener收到ApplicationEnvironmentPreparedEvent事件时, 创建SourceLoader并执行load,加载配置。
org.springframework.boot.SpringApplicationRunListener
用于监听spring boot启动并作出相应处理。
Listener for the SpringApplication run method。
初始化时机: 在SpringApplication启动时进行初始化。
org.springframework.boot.SpringBootExceptionReporter
回调接口,用于对Spring Boot应用启动失败(发生异常)后,进行异常播报的组件。
初始化时机: 在SpringApplication启动时(创建完Application context后)进行初始化。
org.springframework.context.ApplicationContextInitializer
用于在刷新之前初始化Spring ConfigurableApplicationContext的回调接口。比如,servlet web容器会用该组件设置一些额外的属性。
初始化时机: Spring Application构造时创建。
org.springframework.context.ApplicationListener
用于监听事件并作处理。
初始化时机: Spring Application构造时创建。
org.springframework.boot.env.EnvironmentPostProcessor
在context刷新前可对environment进行修改的组件。
初始化时机: 在run listener发出ApplicationEnvironmentPreparedEvent事件后触发。
org.springframework.boot.diagnostics.FailureAn编程alyzer
分析错误,展示给用户诊断结果。
初始化时机: 在SpringApplication启动时(创建完Application context后)进行初始化。 伴随一个SpringBootExceptionReporter(即org.springframework.boot.diagnostics.FailureAnalyzers) 的实例化而实例化。
org.springframework.boot.diagnostics.FailureAnalysisReporter
在错误分析完成后,向用户展示结果。(Spring Boot默认实现是通过日志展示出来)
初始化时机: 在SpringApplication启动时(创建完Application context后)发生错误的情况下进行初始化。
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.conjstext.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 China编程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
三、自动配置类
以下是一个简单的自动配置类示例:
package com.example.config; import org.springframework.context.annwww.chinasem.cnotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyAutoConfiguration { @Bean public MyService myService() { return new MyService(); } }
条件性自动配置
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(); } }
以上就是关于SpringBoot的spring.factories文件详细说明的详细内容,更多关于SpringBoot spring.factories文件的资料请关注编程China编程(www.chinasem.cn)其它相关文章!
这篇关于关于SpringBoot的spring.factories文件详细说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!