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");}
}