当前位置: 首页 > 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.dtcms.com/a/208267.html

相关文章:

  • Wkhtmltopdf使用
  • 端到端大语言模型微调技术 Demo 全流程详解(附完整模块说明)
  • 飞书知识问答产品测评:让企业玩转AI
  • C# TCP协议全面指南:从可靠传输到企业级高并发的深度实践​
  • 职业规划:动态迭代的系统化路径
  • C# Windows Forms应用程序-001
  • Win/Linux安装flash attention2
  • 医学人工智能中的分层处理与跨模态融合:深度架构设计研究(基础教程.下)
  • 127. 单词接龙
  • 苍穹外卖day1实战,Idea中Lombok编译时“找不到符号”,更改JDK版本最全流程,作者亲身尝试
  • java Sm2SignWithSM3转php
  • 不做算法备案后果
  • VSCode如何像Pycharm一样“““回车快速生成函数注释文档?如何设置文档的样式?
  • Ubuntu安装编译Pangolin时所需的OpenGL依赖
  • STM32开发环境配置——VSCode+PlatformIO + CubeMX + FreeRTOS的集成环境配置
  • Oracle 的 MOVE 操作是否重建表?
  • springboot配置redis lettuce连接池,以及连接池参数解释
  • 从逻辑学视角严谨证明数据加密的数学方法与实践
  • 【Ubuntu】如何在一个脚本文件中跑三个python文件?以及端口被占的解决方法
  • 企业级云原生爬虫架构与智能优化
  • ArcGIS Pro 3.4 二次开发 - 地理数据库
  • PostgreSQL 数据库备份与恢复
  • 从源码编译支持ffmpeg(H264编码)的opencv(创建mp4视频报错:H264 is not supported with codec id 28)
  • Oracle 基础知识作业的使用
  • Linux-线程同步于互斥
  • Docker Volumes 还原指南
  • 超详细openBmc Virtual Media 功能及实现流程(1)
  • 使用Rancher在CentOS 环境上部署和管理多Kubernetes集群
  • nginx配置跨域请求,后台不用配置啦,完美
  • VMware虚拟机突然无法ssh连接