@RefreshScope热更新原理

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: @RefreshScope通过组合注解实现配置热更新,核心在于@Scope("refresh")与代理机制。标注该注解的Bean被缓存,配置变更时清空缓存并触发Spring重新创建实例,结合Environment刷新,实现@Value属性动态更新,本质是缓存失效+Bean重建机制。

在前面学习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做流程性、原理性了解。

相关文章
|
人工智能 前端开发 机器人
虚拟数字人开放平台产品分享
本文摘自虚拟数字人新品发布会姜望讲解部分
2355 0
虚拟数字人开放平台产品分享
|
缓存 Java Nacos
一文带你理解@RefreshScope注解实现动态刷新原理
一文带你理解@RefreshScope注解实现动态刷新原理
1395 0
一文带你理解@RefreshScope注解实现动态刷新原理
|
2月前
|
Arthas 人工智能 Java
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
Arthas Agent 是基于阿里开源Java诊断工具Arthas的AI智能助手,支持自然语言提问,自动匹配排障技能、生成安全可控命令、循证推进并输出结构化报告,大幅降低线上问题定位门槛。
1318 64
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
|
16天前
|
弹性计算 监控 安全
2026年阿里云秒杀活动全攻略:时间、入口、技巧与低成本上云方案
2026年阿里云推“普惠上云”战略,每日10:00/15:00限时秒杀轻量/ECS云服务器,低至38元/年!本文详解抢购技巧、入口及备选方案(如68元轻量、99元ECS、免费试用等),助开发者与中小企业低成本高效上云。
214 6
|
2月前
|
人工智能 数据可视化 Linux
3分钟零代码上手AI龙虾OpenClaw:阿里云无影云电脑/本地部署+百炼API配置+Skill集成+避坑大全
2026年,AI自动化助手已经成为日常办公、效率提升的刚需工具,OpenClaw(曾用名Clawdbot)凭借**开源轻量化、无需编程基础、可扩展技能生态、7×24小时稳定运行**的优势,成为零基础新手首选的AI智能体。它能把自然语言指令转化为实际操作,完成文件管理、定时任务、网页自动化、内容处理等一系列工作,真正实现“一句话交给AI,全程不用手动盯守”。
737 2
|
4月前
|
数据采集 人工智能 Java
核心目标:构建Java全流程AI Agent
在AI深度赋能企业背景下,依托JBoltAI框架,打造贯穿业务全链路的全流程AI Agent。突破传统自动化局限,实现跨模块协同、多系统融合与自适应迭代,推动Java生态智能化升级。
531 5
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
451 3
|
人工智能 监控 安全
收藏!十种企业最佳单点登录(SSO)工具选择与对比
本篇文章帮大家寻找到了适合企业的十大单点登录解决方案,详细介绍它们的关键功能、安全优势,以及它们如何满足不同企业的需求。
426 0
收藏!十种企业最佳单点登录(SSO)工具选择与对比
|
存储 JSON NoSQL
MongoDB常用命令
本文介绍了将文章评论数据存储到MongoDB中的操作方法,包括数据库和集合的基本操作。主要内容涵盖:选择与创建数据库(如`articledb`)、数据库删除、集合的显式与隐式创建及删除、文档的CRUD操作(插入、查询、更新、删除)。此外,还详细说明了分页查询、排序查询以及统计查询的方法,例如使用`limit()`、`skip()`实现分页,`sort()`进行排序,`count()`统计记录数。通过实例展示了如何高效管理MongoDB中的数据。
|
消息中间件 Java 数据库连接
Hologres 数据导入与导出的最佳实践
【9月更文第1天】Hologres 是一款高性能的实时数仓服务,旨在提供快速的数据分析能力。无论是从外部数据源导入数据还是将数据导出至其他系统,都需要确保过程既高效又可靠。本文将详细介绍如何有效地导入数据到 Hologres 中,以及如何从 Hologres 导出数据。
719 1