本章探索spring boot的spring.factories以及 加载时机
spring-boot包下的spring.factories文件配置的key有
- org.springframework.boot.env.PropertySourceLoader
- org.springframework.boot.SpringApplicationRunListener
- org.springframework.boot.SpringBootExceptionReporter
- org.springframework.context.ApplicationContextInitializer
- org.springframework.context.ApplicationListener
- org.springframework.boot.env.EnvironmentPostProcessor
- org.springframework.boot.diagnostics.FailureAnalyzer
- org.springframework.boot.diagnostics.FailureAnalysisReporter
org.springframework.boot.env.PropertySourceLoader
功能:
加载配置
加载时机:
- Environment初始化完成
- 发出ApplicationEnvironmentPreparedEvent事件
- ConfigFileApplicationListener监听事件,触发postProcessEnvironment,loader
- loader触发加载PropertySourceLoader
- ConfigFileApplicationListener监听事件,触发postProcessEnvironment,loader
- 发出ApplicationEnvironmentPreparedEvent事件
org.springframework.boot.SpringApplicationRunListener
功能:
监听spring-boot启动的不同状态下的不同事件
加载时机
- SpringApplication实例化之后,执行run方法
- getRunListeners获取所有SpringApplicationRunListener, 在Environment实例化之前
org.springframework.boot.SpringBootExceptionReporter
功能:
捕获spring-boot启动异常,输出易于读的格式
加载时机
- SpringApplication实例化之后,执行run方法
- ApplicationContext实例化后
- 加载SpringBootExceptionReporter的实现如, FailureAnalyzers
- ApplicationContext实例化后
org.springframework.context.ApplicationContextInitializer
功能
初始化/完善ApplicationContext
加载时机
- SpringApplication实例化
- SpringApplication构造方法加载ApplicationContextInitializer
org.springframework.context.ApplicationListener
功能
监听spring事件
加载时机
- SpringApplication实例化
- SpringApplication构造方法加载ApplicationListener
org.springframework.boot.env.EnvironmentPostProcessor
功能
Environment后置处理
加载时机
- Environment初始化完成
- 发出ApplicationEnvironmentPreparedEvent事件
- ConfigFileApplicationListener监听事件,触发loadPostProcessors加载并触发EnvironmentPostProcessor
- 发出ApplicationEnvironmentPreparedEvent事件
org.springframework.boot.diagnostics.FailureAnalyzer
功能
异常分析
加载时机
- SpringApplication实例化之后,执行run方法
- ApplicationContext实例化后
- 加载SpringBootExceptionReporter的实现如, FailureAnalyzers
- FailureAnalyzers加载FailureAnalyzer
- 加载SpringBootExceptionReporter的实现如, FailureAnalyzers
- ApplicationContext实例化后
org.springframework.boot.diagnostics.FailureAnalysisReporter
功能
异常分析报告
加载时机
- SpringApplication实例化之后,执行run方法
- ApplicationContext实例化后
- 加载SpringBootExceptionReporter的实现如, FailureAnalyzers
- FailureAnalyzers输出报告时加载FailureAnalysisReporter
- 加载SpringBootExceptionReporter的实现如, FailureAnalyzers
- ApplicationContext实例化后
spring-boot-autoconfigure包下的spring.factories的key
跟spring-boot包下不同的key有
- org.springframework.boot.autoconfigure.EnableAutoConfiguration
- org.springframework.boot.autoconfigure.AutoConfigurationImportListener
- org.springframework.boot.autoconfigure.AutoConfigurationImportFilter
- org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider
org.springframework.boot.autoconfigure.EnableAutoConfiguration
功能
注解配置,自动加载类
加载时机
是spring-boot扩展了spring的ImportSelector接口来实现的
- SpringApplicaton实例化,把启动main方法持有
- SpringApplication.run方法
- 初始化监听,初始化Environment, 实例化ApplicationContext
- 刷新ApplicationContext, AbstractApplicationContext.refresh()方法。 invokeBeanFactoryPostProcessors触发BeanDefinitionRegistryPostProcessor处理,解析持有main方法上的注解, 注解如果有@Import(AutoConfigurationImportSelector.class),则触发AutoConfigurationImportSelector的getAutoConfigurationEntry方法完成加载
- 初始化监听,初始化Environment, 实例化ApplicationContext
- SpringApplication.run方法
org.springframework.boot.autoconfigure.AutoConfigurationImportListener
功能
EnableAutoConfiguration配置被加载时触发
加载时机
- org.springframework.boot.autoconfigure.EnableAutoConfiguration完成加载
- 同样是在AutoConfigurationImportSelector.getAutoConfigurationEntry方法触发加载和执行
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter
功能
对加载的EnableAutoConfiguration进行过滤,根据具体类文件上声明的@Conditionxxx注解等
- org.springframework.boot.autoconfigure.EnableAutoConfiguration完成加载
- 同样是在AutoConfigurationImportSelector.getAutoConfigurationEntry方法触发加载和执行过滤
org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider
功能
提供可用的视图模板引擎查找
加载时机
- 配合webApplicationContext
- 如ErrorMvcAutoConfiguration,配置错误页面, /error
- 构造视图解析器时加载,如DefaultErrorViewResolver
- 如ErrorMvcAutoConfiguration,配置错误页面, /error
网友评论