Spring Boot 的插件扩展机制是其框架设计的核心优势之一,允许开发者通过标准化接口和 SPI(Service Provider Interface)机制灵活定制框架行为。以下分类整理其关键扩展点及实现原理:
⚙️ 一、启动过程扩展点
-
ApplicationContextInitializer
- 作用:在 Spring 容器初始化前(
refresh()
之前)执行自定义逻辑,如环境变量预处理或动态注册 Bean。 - 配置方式:
- 代码注入:
SpringApplication.addInitializers(new CustomInitializer())
- 配置文件:
context.initializer.classes=com.example.CustomInitializer
- SPI 注册:在
META-INF/spring.factories
添加:org.springframework.context.ApplicationContextInitializer=com.example.CustomInitializer
- 代码注入:
- 作用:在 Spring 容器初始化前(
-
CommandLineRunner
与ApplicationRunner
- 作用:在应用启动完成后执行初始化任务(如数据预加载),两者区别在于参数封装方式(原始参数 vs 结构化对象
ApplicationArguments
)。 - 配置:直接实现接口并添加
@Component
注解,通过@Order
控制执行顺序。
- 作用:在应用启动完成后执行初始化任务(如数据预加载),两者区别在于参数封装方式(原始参数 vs 结构化对象
🔧 二、Bean 生命周期扩展点
-
BeanDefinitionRegistryPostProcessor
- 触发时机:在 Bean 定义加载后、实例化前,可动态注册/修改 Bean 定义(如引入外部类)。
- 示例:
public class CustomPostProcessor implements BeanDefinitionRegistryPostProcessor { @Override public void