当前位置: 首页 > 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成员函数上的注解是没有意义的。

相关文章:

  • 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文件?以及端口被占的解决方法
  • 企业级云原生爬虫架构与智能优化
  • 设计网站需要哪些流程/网络工具
  • 两人做性视频网站/品牌营销战略
  • jsp ajax网站开发典型实例 pdf/百度开户返点
  • 北方网天津疫情/网络推广优化是干啥的
  • ckplayer 视频网站/百度登录页
  • 做专业课视频课的网站/百度推广托管公司