spring通过aware接口实现核心对象自动注入:applicationcontextaware获取应用上下文,beanfactoryaware获取基础容器,beannameaware和beanclassloaderaware分别获取bean名称与类加载器,environmentaware、resourceloaderaware、messagesourceaware、applicationeventpublisheraware按需获取对应功能对象。

直接通过实现特定的 Aware 接口,让 Spring 容器在 Bean 初始化早期自动把对应的核心对象注入进来。这不是靠手动查找或硬编码调用,而是容器主动回调 set 方法完成注入。
获取 ApplicationContext(应用上下文)
这是最常用的方式,适用于需要跨 Bean 协作、发布事件、读取配置、国际化等场景:
- 实现 ApplicationContextAware 接口,重写
setApplicationContext(ApplicationContext) - Spring 会在 Bean 初始化阶段(早于
InitializingBean.afterPropertiesSet()和初始化方法)自动调用该方法 - 注入的是完整的
ApplicationContext,它继承自BeanFactory,功能更丰富
获取 BeanFactory(基础容器)
适合轻量级需求,比如仅需按名称/类型获取 Bean 或检查 Bean 定义:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 实现 BeanFactoryAware 接口,重写
setBeanFactory(BeanFactory) - 比 ApplicationContextAware 更底层,不支持事件、环境、资源加载等高级能力
- 在非 Web 环境或嵌入式容器中更稳定,依赖更少
获取当前 Bean 名称和类加载器
用于日志标记、动态注册、条件初始化等上下文感知逻辑:
-
BeanNameAware:重写
setBeanName(String),拿到该 Bean 在容器中的 ID 或别名 -
BeanClassLoaderAware:重写
setBeanClassLoader(ClassLoader),获取当前 Bean 所属 ClassLoader,对多模块、热部署场景很关键
其他实用核心对象获取方式
根据具体需求选择对应接口,全部由容器统一管理生命周期和注入时机:
-
EnvironmentAware → 获取
Environment:读取@Profile、@Value、外部配置项 -
ResourceLoaderAware → 获取
ResourceLoader:加载 classpath:/、file:、http: 等资源路径 -
MessageSourceAware → 获取
MessageSource:做多语言文案解析,如getMessage("login.success", null, Locale.CHINA) -
ApplicationEventPublisherAware → 获取
ApplicationEventPublisher:发布自定义事件,触发监听器
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










