栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot@RefreshScope注解导致切面执行两次问题分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot@RefreshScope注解导致切面执行两次问题分析

背景

一次在本地调试代码时,发现请求日志打印了两次,但是sql日志却只有一次,来到日志切面排查后去掉RefreshScope注解,问题解决

前言

xdm 本次只记录问题原因,不带大家看源码,感兴趣的请自行浏览

分析

在这之前需要先普及一个Spring bean作用域的小知识点,了解的可以跳过

Spring的bean作用域有四种取值

singleton(默认) 单例,一个容器只有一个,寿与天(IOC)齐,IOC不灭我不灭

prototype 生命周期=使用周期 用完即死

request 生命周期在一个请求内

session 生命周期在一个会话内

global session 不记得从什么时候开始已经删除掉了

还可以自定义作用域范围RefreshScope就是定义了refresh

我们在使用RefreshScope注解的时候,该注解会修改bean的作用域为自定义的refresh导致他不是单例的,这个时候如果再配置Spring其他的组件注解就会导致容器中有两个相同的bean(如果是切面 就会导致切面执行两次),RefreshScope动态刷新配置的原理也就在此,他开启了对象代理模式,我们引用的都是它的代理对象,当接收到属性更新事件时会先摧毁该bean然后重新走一次bean创建的过程来达到配置刷新的目的

所以,你学废了吗?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862942.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号