ApplicationContextAware 用法

背景和价值

在 Spring 框架中,ApplicationContextAware 是一个接口,用于让 Bean 能够获取到 Spring 的 ApplicationContext 实例。这在需要手动获取其他 Bean 或者访问 Spring 容器相关信息时非常有用。

主要用法步骤:

  1. 实现 ApplicationContextAware 接口
    自定义类实现该接口,并实现 setApplicationContext() 方法

  2. 重写 setApplicationContext 方法
    该方法会在 Bean 初始化时被 Spring 容器调用,传入 ApplicationContext 实例

  3. 注册 Bean
    将该类注册为 Spring 管理的 Bean(通过注解或 XML 配置)

  4. 使用 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配置");
        }
    }
}

参考资料

posted @ 2025-10-15 18:01  向着朝阳  阅读(25)  评论(0)    收藏  举报