@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做流程性、原理性了解。

目录
相关文章
|
9月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细介绍Nacos作为配置中心的实现原理与实战步骤,涵盖配置管理、热更新、共享配置优先级及集群搭建,帮助微服务应用实现配置动态化、高可用部署。
512 4
|
9月前
|
Java Spring
什么是WebFlux
Spring WebFlux 是 Spring Framework 5 引入的响应式Web框架,支持非阻塞、事件驱动的编程模型,适用于高并发场景,可运行于 Netty、Undertow 等服务器,提供注解式和函数式编程接口。
207 2
|
6月前
|
人工智能 Linux API
告别周五熬夜写周报!OpenClaw全自动周报生成实战教程(阿里云/本地部署+百炼API配置)
每到周五,无数职场人都会陷入同样的内耗:想不起一周做了什么、琐碎工作不知如何包装、流水账没人想看、写报告占用大量休息时间。2026年,借助OpenClaw(Clawdbot)AI智能体,你只需要每天花5分钟简单记录碎片工作,就能让AI自动整理、结构化包装、价值升华,生成让领导一眼认可的专业周报。本文将完整讲解AI自动生成周报的完整流程,并提供**2026年3月最新阿里云ECS、Windows11、MacOS、Linux全平台部署OpenClaw**详细步骤、**阿里云百炼Coding Plan免费大模型API配置**、可直接复制的代码命令与高频问题解答,让AI成为你的专职周报助理,彻底解放周末
1506 89
|
5月前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
9923 23
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
10月前
|
人工智能 前端开发 数据库
2025年最适合初学者的AI编程工具Top3:零基础也能写出专业级代码_ai代码生成器推荐
李响团队推荐2025年三款适合零基础的AI编程工具:Lynx AI、CodePal、DevMate。无需代码基础,说句话就能生成程序,帮你快速入门、边用边学,轻松迈入编程世界。
2545 154
|
9月前
|
存储 NoSQL Linux
MongoDB单机部署
本文介绍MongoDB在Windows和Linux系统中的单机部署方法,涵盖下载安装、配置文件设置、命令行与图形化工具连接操作,并提供启动、关闭服务及常见问题处理步骤,助力快速搭建本地MongoDB环境。
249 8
MongoDB单机部署
|
9月前
|
负载均衡 算法 架构师
Ribbon负载均衡
本文深入讲解Spring Cloud中Ribbon实现客户端负载均衡的原理,包括@LoadBalanced注解的作用、负载均衡策略分类与算法,并演示如何自定义配置及优化饥饿加载,帮助读者全面掌握Ribbon的核心机制与应用实践。
186 2
 Ribbon负载均衡
|
9月前
|
存储 安全 前端开发
1.认识OAuth2.0
OAuth2.0是一种开放授权协议,允许第三方应用在用户授权下访问其资源,而无需获取用户账号密码。相比传统授权更安全,广泛用于第三方登录、服务间资源共享等场景,支持授权码、简化、密码及客户端四种模式,其中授权码模式最安全,适用于Web应用;简化模式适合无后端的前端应用;密码模式用于高度信任的服务间调用;客户端模式则用于系统间内部通信。Spring Security OAuth2可实现单点登录与服务权限控制。
521 0
1.认识OAuth2.0
|
9月前
|
存储 负载均衡 算法
负载均衡算法
本文介绍了多种负载均衡算法:随机、轮询、最小活跃数、源地址哈希及一致性哈希。涵盖适用场景、实现原理与优化策略,如加权随机与加权轮询,并结合代码与图示解析调度逻辑,适用于分布式系统流量分配设计。
311 0
|
9月前
|
缓存 Java Nacos
@RefreshScope热更新原理
@RefreshScope注解通过组合@Scope("refresh")实现配置热更新,利用代理模式与缓存机制。加注解的Bean被放入自定义作用域缓存,配置变更时清空缓存,触发Spring重新创建Bean,从而注入最新配置值,实现动态刷新。