RefreshScopeRefreshedEvent与EnvironmentChangeEvent的区别及相关疑问
聊聊
RefreshScopeRefreshedEvent 和 EnvironmentChangeEvent 的核心区别 其实这俩事件的定位差异挺清晰的,只是官方注释讲得太模糊,容易让人混淆。我给你拆解下:
先看 EnvironmentChangeEvent
- 触发场景:当Spring
Environment中的属性直接发生变更时触发。比如你通过/actuator/env接口修改了某个属性值,或者配置中心(比如Config Server)推送了新配置,客户端把这些新配置同步到了自身的Environment里,这时候就会抛出这个事件。 - 核心作用:给全局所有监听组件发通知——“喂,某些配置属性变啦,需要的话赶紧重新读一遍”。它关注的是属性本身的变更,不涉及Bean的重建。
再看 RefreshScopeRefreshedEvent
- 触发场景:当
@RefreshScope标记的Bean所在的Scope被刷新时触发,最常见的就是调用/actuator/refresh接口,或者代码里调用RefreshScope.refresh()方法的时候。 - 核心作用:专门针对
@RefreshScope注解的Bean——“你们这些Scope里的Bean,赶紧销毁重建,去拿最新的配置”。它的目标是让Scope内的Bean重新初始化,从而加载更新后的属性。 - 额外说明:其实执行refresh操作时,内部通常会先更新
Environment(这时候可能会触发EnvironmentChangeEvent),但RefreshScopeRefreshedEvent是后续专门处理Bean重建的环节,相当于“属性已经更完了,该让相关Bean生效新配置了”。
一句话总结差异
EnvironmentChangeEvent是属性变更的全局通知,告诉你“配置变了”;RefreshScopeRefreshedEvent是RefreshScope Bean的刷新指令,告诉你“该让这些Bean用新配置了”。
内容的提问来源于stack exchange,提问作者sabtharishi
相关产品推荐
相关产品推荐

