spring.factories
里,Spring 会根据接口来加载实现类,常见的几个接口包括:
一、org.springframework.context.ApplicationListener
1、作用
监听 Spring 容器事件,如 ApplicationReadyEvent
。
2、使用方法
项目结构 | Spring Boot 2.x | Spring Boot 3.x |
---|---|---|
监听器注册方式 | spring.factories | spring.factories (兼容) |
是否需要改动 | 否 | 否,但需注意 Java 17 / 模块要求 |
是否可用新机制 | 不适用 | 自动配置类使用 AutoConfiguration.imports 替代即可 |
(1)Spring Boot 2.x 配置
① 配置文件
# 文件位置:src/main/resources/META-INF/spring.factories
org.springframework.context.ApplicationListener=\
com.example.agent.SpringContextHolder
Spring Boot 2 会自动读取 spring.factories
并注册对应的监听器。
② 代码
package com.example.agent;import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.boot.context.event.ApplicationReadyEvent;public class SpringContextHolder implements ApplicationListener<ApplicationReadyEvent> {private static ApplicationContext applicationContext;@Overridepublic void onApplicationEvent(ApplicationReadyEvent event) {applicationContext = event.getApplicationContext();System.out.println("[Agent] Captured ApplicationContext: " + applicationContext);}public static ApplicationContext getApplicationContext() {return applicationContext;}
}
(2)Spring Boot 3.x 配置
Spring Boot 3 依然兼容 spring.factories
文件注册监听器(只是不推荐用于自动配置类),即上述方法仍然兼容。
① 配置
同上
② 代码
同上
(3)Spring Boot 3.x可选:自动配置类也可结合监听器(推荐)
① 配置
src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
com.example.agent.AgentAutoConfiguration
② 代码
@Configuration
public class AgentAutoConfiguration {@EventListener(ApplicationReadyEvent.class)public void onReady(ApplicationReadyEvent event) {System.out.println("AutoConfiguration 捕获到 ApplicationContext");}
}