@RefreshScope热更新原理

简介: 本文深入解析Spring Cloud中@RefreshScope注解实现配置热更新的原理。通过分析其组合注解特性,重点探讨@Scope("refresh")如何借助代理模式与缓存机制,在配置变更时触发Bean重建,结合Nacos动态刷新Environment,实现配置实时生效。

在前面学习Nacos的章节中,为了实现配置的热更新我们采取了两种方式,其一就是借助于注解:@RefreshScope,那么这个注解是如何做到标识即生效的?我们尝试一起分析一下。

1.了解@RefreshScope本身

点击进去此注解,可以发现其本质也是一个组合注解,如下 对于Spring注解有过研究的读者,对于这几个元注解一定不陌生,简短的篇幅了解一下:

@Target({ ElementType.TYPE, ElementType.METHOD })

目标的作用范围

ElementType.TYPE:能修饰类、接口或枚举类型

ElementType.FIELD:能修饰成员变量

ElementType.METHOD:能修饰方法

ElementType.PARAMETER:能修饰参数

ElementType.CONSTRUCTOR:能修饰构造器

ElementType.LOCAL_VARIABLE:能修饰局部变量

ElementType.ANNOTATION_TYPE:能修饰注解

ElementType.PACKAGE:能修饰包

@Retention(RetentionPolicy.RUNTIME)

保留的生命周期

SOURCE注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;即保留在.java文件中

CLASS注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;即保留在.class文件中

RUNTIME注解不仅被保存到class文件中,jvm加载class文件之后仍然存在;即保留在内存中的字节码文件中,一旦jvm加载就会更新,生命周期最长

@Scope("refresh")

实现配置、实例热加载的关键核心,默认了ScopedProxyMode.TARGET_CLASS; 属性,此属性的功能就是在创建一个代理,在每次调用的时候都用它来调用GenericScope get 方法来获取对象。集成了Spring框架之后,实际就是调用Spring的装配机制重新装配属性。

所以截止目前我们可以了解到:@RefreshScope注解本身是一个组合注解,其实现配置热更新的关键是依赖@Scope("refresh")。我们进一步来看看@RefreshScope到底做了什么?

2.@RefreshScope做了什么

@RefreshScope主要就是基于@Scope注解的作用域代理的基础上进行扩展实现的,加了@RefreshScope注解的类,在被Bean工厂创建后会加入自己的refresh scope 这个Bean缓存中,后续会优先从Bean缓存中获取,当配置中心发生了变更,会把变更的配置更新到spring容器的Environment中,并且同时bean缓存就会被清空,从而就会从bean工厂中创建bean实例了,而这次创建bean实例的时候就会继续经历这个bean的生命周期,使得@Value属性值能够从Environment中获取到最新的属性值,这样整个过程就达到了动态刷新配置的效果。

所以截止目前我们可以了解到下述大致流程:

3.@RefreshScope怎么做到的

基于上面我们知道,@Scope基于缓存失效,实现配置的热更新,我们继续看看它是如何做到的:

4.总结

对于@RefreshScope注解实现配置热更新的流程,实际是借助于缓存失效+Spring重新创建配置Bean解决,知道这个思路之后,读者们可以借助本章节2,或3做流程性、原理性了解。

目录
相关文章
|
8月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细介绍Nacos作为配置中心的实现原理与实战步骤,涵盖配置管理、热更新、共享配置优先级及集群搭建,帮助微服务应用实现配置动态化、高可用部署。
480 4
|
8月前
|
Java Spring
什么是WebFlux
Spring WebFlux 是 Spring Framework 5 引入的响应式Web框架,支持非阻塞、事件驱动的编程模型,适用于高并发场景,可运行于 Netty、Undertow 等服务器,提供注解式和函数式编程接口。
174 2
|
5月前
|
人工智能 Linux API
告别周五熬夜写周报!OpenClaw全自动周报生成实战教程(阿里云/本地部署+百炼API配置)
每到周五,无数职场人都会陷入同样的内耗:想不起一周做了什么、琐碎工作不知如何包装、流水账没人想看、写报告占用大量休息时间。2026年,借助OpenClaw(Clawdbot)AI智能体,你只需要每天花5分钟简单记录碎片工作,就能让AI自动整理、结构化包装、价值升华,生成让领导一眼认可的专业周报。本文将完整讲解AI自动生成周报的完整流程,并提供**2026年3月最新阿里云ECS、Windows11、MacOS、Linux全平台部署OpenClaw**详细步骤、**阿里云百炼Coding Plan免费大模型API配置**、可直接复制的代码命令与高频问题解答,让AI成为你的专职周报助理,彻底解放周末
1407 89
|
8月前
|
人工智能 物联网 测试技术
ModelScope魔搭社区发布月报 -- 25年12月
魔搭社区12月重磅更新DeepSeek 3.2、Mistral-3等模型,Z-Image-Turbo引领文生图生态,平台全面升级加速开源模型落地。
902 8
|
8月前
|
存储 人工智能 运维
一行代码实现智能异常检测:UModel PaaS API 架构设计与最佳实践
阿里云 UModel PaaS API 发布:通过 Table + Object 双层抽象,屏蔽存储差异、自动处理字段映射与过滤条件,让每一个实体都成为一个‘可调用的对象’,真正实现‘以实体为中心’的智能可观测。
1117 172
|
机器学习/深度学习 人工智能 API
大模型推理服务全景图
国内大模型推理需求激增,性能提升的主战场将从训练转移到推理。
3736 142
|
8月前
|
存储 NoSQL Linux
MongoDB单机部署
本文介绍MongoDB在Windows和Linux系统中的单机部署方法,涵盖下载安装、配置文件设置、命令行与图形化工具连接操作,并提供启动、关闭服务及常见问题处理步骤,助力快速搭建本地MongoDB环境。
208 8
MongoDB单机部署
|
8月前
|
负载均衡 算法 架构师
Ribbon负载均衡
本文深入讲解Spring Cloud中Ribbon实现客户端负载均衡的原理,包括@LoadBalanced注解的作用、负载均衡策略分类与算法,并演示如何自定义配置及优化饥饿加载,帮助读者全面掌握Ribbon的核心机制与应用实践。
166 2
 Ribbon负载均衡
|
8月前
|
存储 安全 前端开发
1.认识OAuth2.0
OAuth2.0是一种开放授权协议,允许第三方应用在用户授权下访问其资源,而无需获取用户账号密码。相比传统授权更安全,广泛用于第三方登录、服务间资源共享等场景,支持授权码、简化、密码及客户端四种模式,其中授权码模式最安全,适用于Web应用;简化模式适合无后端的前端应用;密码模式用于高度信任的服务间调用;客户端模式则用于系统间内部通信。Spring Security OAuth2可实现单点登录与服务权限控制。
480 0
1.认识OAuth2.0
|
8月前
|
物联网 开发者
Z-Image Turbo LoRA训练魔法:如何保持加速生图能力
ModelScope DiffSynth团队推出Z-Image-Turbo-DistillPatch,解决LoRA训练后丢失Turbo加速问题。支持8步高质量生成,兼容标准SFT流程,即插即用,无需重训。开源地址:modelscope.cn/models/DiffSynth-Studio/Z-Image-Turbo-DistillPatch
2277 2

热门文章

最新文章