当前位置: 首页 > news >正文

spring注解旁路问题讨论

下面是样例测试代码:

@Componentstatic class Downloader {@Autowired@LazyDownloader self;private int counter = 0;@FuncTracepublic void download() {log.info("Downloader.download");try {this.preProcess();self.downloadInternal("1.txt");log.info("download success");} catch (Exception e) {log.info("download catch error");}}@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000L, multiplier = 1.5))@FuncTracepublic void downloadInternal(String filePath) {counter++;log.info("downloadInternal times:" + counter);throw new Exception("download failed");}@FuncTracepublic void preProcess() {log.info("pre processing...");}}

@FuncTrace是用@Aspect做的打印函数进出日志的注解。@Retryable是spring自带的重试注解。

加了这两个注解后的函数,要使得注解生效,需用自注入的self方式调用,否则调用的还是原始的逻辑,而非切面动态编织(weave)后的逻辑。换言之,this调用的是函数在编译期的字节码,self调用的则是函数被动态代理后的新字节码。在需要self调用的场合使用了this调用,就会导致注解旁路。

另外,@Aspect切面只能处理public、protected、package访问权限的成员函数,像private、static成员函数均无法拦截,所以,private或static成员函数上的注解是没有意义的。

http://www.xdnf.cn/news/613747.html

相关文章:

  • 使用Python在PowerPoint中插入形状(Shape)
  • 技术文档的进阶之旅
  • 文章记单词 | 第107篇(六级)
  • 3par persona设置错误,linux I/O持续报错
  • mPLUG-Owl3图片描述
  • SQL实战之索引优化(单表、双表、三表、索引失效)
  • FFplay 播放原始数据
  • C++性能测试工具——sysprof的使用
  • 【AUTOSAR网络管理】T_NM_Timeout参数测试指南
  • 【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(4)
  • 强化学习鱼书(8)——DQN
  • Qt window frame + windowTitle + windowIcon属性(3)
  • Android11以上通过adb复制文件到内置存储让文件管理器可见
  • 实验13 数据库权限管理
  • 告别繁琐操作,一键批量发布!
  • Linux下MySQL的安装与使用
  • 开局插第一个眼侦查对方打野的动态
  • 人脸识别技术合规备案最新政策详解
  • 利用条件编译实现RTT可控的调试输出
  • 20250523-BUG-E1696:无法打开元数据文件“platform.winmd(已解决)
  • 写起来比较复杂的深搜题目
  • 差分数组一文全解析
  • Vue.js教学第十三章:深入解析Vuex,前端状态管理核心指南
  • 分布式事务之Seata
  • 根据YOLO数据集标签计算检测框内目标面积占比(YOLO7-10都适用)
  • Linux常用命令简介
  • 驱动开发学习20250523
  • C# :HImage转Mat方法
  • python与flask框架
  • 在App Store Connect上编辑多个用户的访问权限