spring aop 内部引用失效分析
背景
用了spring retry 发现在有些场景下失效,也让我想起了之前看spring 事务时会有一些场景下失效的这个问题
代码
接口public interface UserService {public void start() ;public void stop();
}实现类
@Service
public class UserServiceImpl implements UserService {@Override@Retryable()public void start() {if (1 == 1) {throw new RuntimeException();}}@Overridepublic void stop() {start();}
}
测试
ConfigurableApplicationContext run = SpringApplication.run(K8sDemoApplication.class, args);UserService user = run.getBean(UserService.class);//生效user.start();//失效// user.stop();
测试发现如果直接调用start 方法是会生效的
通过stop()方法里面调用start 方法是会失效的
分析
首先我们知道如果要在一个方法前后加一些todo ,有两种方法,一种是硬code
还有一种是通过动态代理的方法,这里通过注解的方法,实际底层是通过cglib这种代理实现的,默认应该是jdk动态代理的,但是我用arthas分析实际是用cglib这种形式,这个不重要。
为啥通过代理的,两种不同的调用方式会有区别呢
直接调用为啥是可以的,因为实际上的调用对象是生成的动态代理对象,在方法上进行代理的。
我们重点了解下为啥间接调用失败。
看下编译后的代码
@Service
public class UserServiceImpl implements UserService {public UserServiceImpl() {}public void start() {throw new RuntimeException();}public void stop() {//实际上调用start,我们可以发现是通过this 对是本身这个对象直接调用的this.start();}
}
总结
加深了对之前glibc动态代理的理解
相关文章:
spring aop 内部引用失效分析
背景 用了spring retry 发现在有些场景下失效,也让我想起了之前看spring 事务时会有一些场景下失效的这个问题 代码 接口public interface UserService {public void start() ;public void stop(); }实现类 Service public class UserServiceImpl implements User…...

IEDA常用快捷键(后续更新ing)
1. 快速生成语句 1.快速生成main()方法 psvm或者main回车 2.快速生成输出语句 sout,回车 3.快速生成for循环 fori或者itar,回车 2.快捷键 含义操作查找文本CtrlF替换文本CtrlR单行注释Ctrl/多行注释CtrlShift/格式化CtrlAltL复制当前内容至下一行CtrlD补全代码Alt/快速生成…...
Day03—flask与react实现交互(解决跨域问题)
flask :默认的端口为 http://127.0.0.1:5000 react :默认端口为 http://localhost:3000 两个项目运行起来之后,没有实现前后端交互调用 弄了半天,是因为没有给flask 配置跨域 解决办法: pip install flask-cors from …...
JavaScript中的闭包
闭包 闭包是什么 内部函数(嵌套函数)能够访问其外部函数(父函数)的变量,即使外部函数执行完毕后,这些变量仍会保留在内存中,因为内部函数保持着对它们的引用,从而防止了垃圾回收机制回收这些变量。闭包是函数与其词法环境(包括外…...

python画图:matpolt,设置图片尺寸,字体大小,副坐标轴,保存
文章重心: 写论文的时候,图片的大小,字体的大小,副坐标轴,这些都是很重要的因素,保存一下之前用过的画图代码单图多图(两个子图)堆叠柱状图两个Y轴的图问题: python保存的时候,我选择的是svg,但是这样图片会比较大,查重什么的需要把图片都删了(一般有文件大小限制…...

如果突然失业,靠这个项目也能养活自己,6天收入3K
在前两天,我与两位好友相约外出就餐。当时正值雨天,我们便选择了一家大排档,边品尝美食边畅谈人生。聊得尽兴,直到凌晨一点多才回到家中。其中一位朋友最近刚刚遭遇裁员,为了寻找新的工作机会,他已经经历了…...
【OpenCV 基础知识 13】高斯平滑处理图像
函数 cvSmooth 可使用简单模糊、简单无缩放变换的模糊、中值模糊、高斯模糊、双边滤波的任何一种方法平滑图像。每一种方法都有自己的特点以及局限。 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvLaplace相似)…...
web安全渗透测试工具篇(二):sqlmap常用命令和nmap常用命令
web安全渗透测试工具篇 1. web安全渗透测试-工具使用-sqlmap1.1 SQLMap 的详细使用1.1.1 SQLMap 支持五种不同的注入模式1.2.SQLmap的模块划分1.2.1.Target目标1.2.2.Request请求1.2.3.Optimization(优化):1.2.4.Injection(注入):1.2.5.Detection(检测):1.2.6.Techniques…...

STM32 USART的字符编码(发送器的实现逻辑)
目录 概述 1 字符编码 1.1 USART 字符说明 1.2 字长编程 2 发送器 2.1 字符发送 2.2 可配置的停止位 2.3 配置停止位方法 3 单字节通信 4 中断字符 5 空闲字符 概述 本文主要讲述STM32 USART的发送端功能实现的原理,包括字节编码长度,发送器…...
[市赛2024-X2]自习室
Description 临近期末考试,自习室的学生来来往往。 这可忙坏了管理自习室的大爷,他随时准备开关灯。 自习室只要有学生来,就需要开灯。一开始没有学生来之前灯是关闭的。 周日这一天共有 n 位同学来自习,第 i 个同学将在时间 …...

Spring ----> IOC
文章目录 一、 Spring 是一个包含众多工具的IoC容器二、 什么是IOC以及好处三、 如何实现loc思想四、Spring提供的实现loC的方法 --- 类注解方法注解4.1 类注解类注解概念介绍类注解的使用 4.2 方法注解Bean 一、 Spring 是一个包含众多工具的IoC容器 场景解析:首先…...

AI重塑保险业未来:机器学习在风险评估、欺诈检测与客户服务中的深度应用
🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…...

某某某加固系统分析
某某某加固系统内核so dump和修复: 某某某加固系统采取了内外两层native代码模式,外层主要为了保护内层核心代码,从分析来看外层模块主要用来反调试,释放内层模块,维护内存模块的某些运行环境达到防止分离内外模块&am…...

嵌入式之音频基础知识
声音特性 1、响度:人主观上感觉声音的大小(俗称音量),由“振幅”和人离声源的距离决定,振幅越大响度越大,人和声源的距离越小,响度越大; 2、音调:声音的高低࿰…...
如何做好软件项目的沟通管理
如何做好软件项目的沟通管理 软件项目的沟通管理是确保项目信息在团队成员、利益相关者和相关群体之间有效流通的过程。良好的沟通是项目成功的关键,在项目开始时,需要制定详细的沟通计划,包括沟通的目的、对象、内容、频率和渠道等信息。 …...
linmux
了了了了了了了了了了了了了了...
Vue3学习-vue-router之路由传参
传参方案一:RouterLink 字符串 //传值 <RouterLink to"/page?a1&b2">{{ RouterLink 字符串传参 }}</RouterLink> //取值 import { toRefs } from vue import { useRoute } from vue-router const { query} toRefs(useRoute()) console.…...

ubuntu20.04 10分钟搭建无延迟大疆无人机多线程流媒体服务器
1.使用效果 无人机画面 2.服务器视频端口 3.使用教程 3.1.下载ubuntu对应软件包:系统要求ubuntu16以上 3.2修改端口(config.xml文件) 3.3启动服务 目录下输入:终端启动:./smart_rtmpd 后台启动:nohup ./…...

hugging face笔记:PEFT
1 介绍 PEFT (Parameter-Efficient Fine Tuning) 方法在微调时冻结预训练模型参数,并在其上添加少量可训练的参数(称为适配器)这些适配器被训练用来学习特定任务的信息。这种方法已被证明在内存效率和计算使用上非常高效,同时能产…...
作业5.26
定义一些常量和数据结构来存储用户信息和消息。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>#define MAX_USERS 100 // 最大用户数 #define MAX_M…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...