68.3 启动前自定义Environment或ApplicationContext
每个SpringApplication
都有ApplicationListeners
和ApplicationContextInitializers
,用于自定义上下文(context)或环境(environment)。Spring Boot从META-INF/spring.factories
下加载很多这样的内部使用的自定义,有很多方法可以注册其他的自定义:
- 以编程方式为每个应用注册自定义,通过在
SpringApplication
运行前调用它的addListeners
和addInitializers
方法来实现。 - 以声明方式为每个应用注册自定义,通过设置
context.initializer.classes
或context.listener.classes
来实现。 - 以声明方式为所有应用注册自定义,通过添加一个
META-INF/spring.factories
并打包成一个jar文件(该应用将它作为一个库)来实现。
SpringApplication
会给监听器(即使是在上下文被创建之前就存在的)发送一些特定的ApplicationEvents
,然后也会注册监听ApplicationContext
发布的事件的监听器,查看Spring Boot特性章节中的Section 23.5, “Application events and listeners” 可以获取完整列表。
在应用上下文刷新前使用EnvironmentPostProcessor
自定义Environment
是可能的,每个实现都需要注册到META-INF/spring.factories
:
org.springframework.boot.env.EnvironmentPostProcessor=com.example.YourEnvironmentPostProcessor