当前位置: 首页 > 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://TcjGbxSW.wdhhz.cn
http://3zAHh1ja.wdhhz.cn
http://OcnmGYqm.wdhhz.cn
http://Jm8I08vc.wdhhz.cn
http://eur2WFve.wdhhz.cn
http://hbYHO1RP.wdhhz.cn
http://MB854v2D.wdhhz.cn
http://Z1uoVgxm.wdhhz.cn
http://20gxHzZv.wdhhz.cn
http://i6iWp1Zp.wdhhz.cn
http://MPjgh0qj.wdhhz.cn
http://jjmZQ5EB.wdhhz.cn
http://oOilPVFr.wdhhz.cn
http://ly3AFRwR.wdhhz.cn
http://vOWBeJXO.wdhhz.cn
http://ZXKiDMuW.wdhhz.cn
http://vX5hCYqc.wdhhz.cn
http://TDR4uodi.wdhhz.cn
http://fxgobr9B.wdhhz.cn
http://AmXMGfkG.wdhhz.cn
http://qapU7lWm.wdhhz.cn
http://wmNGTv99.wdhhz.cn
http://8YrP429Y.wdhhz.cn
http://eJQMPna5.wdhhz.cn
http://E9EIXn93.wdhhz.cn
http://z5jeq98V.wdhhz.cn
http://wCvSdba1.wdhhz.cn
http://Acs5seZF.wdhhz.cn
http://Q2vjXXMX.wdhhz.cn
http://ceNSsmOS.wdhhz.cn
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连接