ApplicationContextAware 用法
背景和价值
在 Spring 框架中,ApplicationContextAware 是一个接口,用于让 Bean 能够获取到 Spring 的 ApplicationContext 实例。这在需要手动获取其他 Bean 或者访问 Spring 容器相关信息时非常有用。
主要用法步骤:
-
实现 ApplicationContextAware 接口
自定义类实现该接口,并实现setApplicationContext()方法 -
重写 setApplicationContext 方法
该方法会在 Bean 初始化时被 Spring 容器调用,传入ApplicationContext实例 -
注册 Bean
将该类注册为 Spring 管理的 Bean(通过注解或 XML 配置) -
使用 ApplicationContext
通过保存的ApplicationContext实例,可以获取其他 Bean 或容器信息
DEMO
package com.example.demo.util;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* Spring上下文工具类,用于获取ApplicationContext和容器中的Bean
*/
@Component
public class SpringContextUtil implements ApplicationContextAware {
// 保存ApplicationContext实例
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的方法,保存ApplicationContext实例
* 该方法会在当前Bean被Spring容器初始化时调用
*/
@Override
public void setApplicationContext(ApplicationContext context) {
applicationContext = context;
}
/**
* 获取ApplicationContext实例
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
/**
* 根据Bean的类型获取Bean实例
*/
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
return applicationContext.getBean(clazz);
}
/**
* 根据Bean的名称获取Bean实例
*/
public static Object getBean(String beanName) {
checkApplicationContext();
return applicationContext.getBean(beanName);
}
/**
* 检查ApplicationContext是否已初始化
*/
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("ApplicationContext未初始化,请检查Spring配置");
}
}
}

浙公网安备 33010602011771号