前言

我这儿是在AOP中,通过 ProceedingJoinPoint.getTarget() 获取到 serviceImpl 的 object 实例,然后通过反射调用当前service的其他方法进行返回
报错是因为在反射调用的serviceImpl中的方法中,又去调用了当前serviceImpl中的 @Async 方法
报错正文:

Cannot find current proxy: Set ‘exposeProxy’ property on Advised to ‘true’ to make it available, and ensure that AopContext.currentProxy() is invoked in the same thread as the AOP invocation context.

解决方法

  1. 添加注解配置项
@EnableAspectJAutoProxy(exposeProxy = true, proxyTargetClass = true)
  • exposeProxy = true

指定代理被AOP框架作为ThreadLocal暴露出来,可以被 AopContext 类获取。默认 false

  • proxyTargetClass = true

指示是否要创建基于子类(CGLIB)的代理,而不是基于标准Java接口的代理。默认为false。

到这一步后,按网上说的,在被调用的 @Async 方法上再添加事务的注解 @Transactional,然后很遗憾,没什么卵用…
debug观察到,ProceedingJoinPoint.getTarget() 获取到的对象是具体的 serviceImpl实现类,不是cglib的代理类,于是找到了解题思路

  1. 将反射使用的 object 用Spring的 cglibObject 代替

修改代码,用 cglibTarget 代替 target 来做反射调用

// 这里的pjp 是 AOP 的 ProceedingJoinPoint
Object target = pjp.getTarget();
Class<?> targetClass = target.getClass();
// 使用spring的cglib代理,代替jdk的反射 - 这样在反射调用的方法里,才能使用 @Async 开启异步线程
Object cglibTarget = SpringUtil.getBean((targetClass.getInterfaces()[0]));

亲测OK,可以成功触发 @Async 的异步操作
希望对后面的兄弟们有所帮助或启发

Cannot find current proxy: Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available相关推荐

  1. 详细整理Spring事务失效的具体场景及解决方案

    实际项目开发中,如果涉及到多张表操作时,为了保证业务数据的一致性,大家一般都会采用事务机制:好多小伙伴可能只是简单了解一下,遇到事务失效的情况,便会无从下手,溪源此篇文章给大家整理了一下常见Sprin ...

  2. 面试官:Spring事务失效的场景有哪些?如何解决?

     作者:溪~源 blog.csdn.net/xuan_lu/article/details/107797505 实际项目开发中,如果涉及到多张表操作时,为了保证业务数据的一致性,大家一般都会采用事务机 ...

  3. Spring AOP源码分析(四)Spring AOP的JDK动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 本篇文章将会介绍上一个例子中的源码执行情况,从中熟悉整个SpringAOP的一些概念和接口设计. 首先整个SpringAOP的 ...

  4. springboot异步和切面_Spring异步编程 你的@Async就真的异步吗?异步历险奇遇记

    引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们biaji一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: 注 ...

  5. springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...

    引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们bia~ji~一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: ...

  6. springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗?异步历险奇遇记

    Spring异步编程 | 你的@Async就真的异步吗?异步历险奇遇记 点击上方"java进阶架构师",选择右上角"置顶公众号" 20大进阶架构专题每日送达 引 ...

  7. 你否有遇到Spring事务失效,花费太多时间找bug

    作者:溪~源 来源:blog.csdn.net/xuan_lu/article/details/107797505 实际项目开发中,如果涉及到多张表操作时,为了保证业务数据的一致性,大家一般都会采用事 ...

  8. 探究Spring AOP 同类调用失效问题

    扯一下沟通 本来这篇文章是想写关于职场上的沟通的,尽管我也是一个初入职场的小白.但是发现时间不太够,只好作罢,后面再补上吧.关于沟通,我总结起来就是"沟通渠道要畅通,沟通要主动,沟通要高效& ...

  9. Spring声明式事务管理实现及原理详解

    目录 1.实现步骤 1.1.配置事务管理器 1.2.启动事务注解 1.3.业务添加注解 2.代码演示 2.1.bean文件 2.2.目标类 2.3.测试类 3.Spring事务属性 3.1.传播行为 ...

  10. springboot异步和切面_spring中的切面和异步执行

    1.首先理解异步和多线程的概念,怎么实现接口的异步调用呢?多线程,这是很多人第一眼想到的关键词,没错,多线程就是一种实现异步调用的方式! 2.下面介绍怎么实现异步调用方式 3.首先如果你的项目是spr ...

最新文章

  1. SLAM之特征匹配(二)————RANSAC--------翻译以及经典RANSAC以及其相关的改进的算法小结
  2. 联想杜比音效_联想小新15 2020锐龙版首销;OPPO Find X2系列也可尝鲜安卓11
  3. redis源码之字符串压缩
  4. html 怎么自动让图片居中显示,css中怎样让图片居中显示?
  5. java wait方法_java wait方法
  6. 深入浅出requireJS-1
  7. 微型计算机接口技术与汇编语言课后答案
  8. 登录和注销、基于Session的购物车案例、验证码的使用、防止表单重复提交
  9. 新浪微博时间格式解析java_仿新浪微博格式化时间
  10. jdbc basedao mysql_Java使用JDBC连接mysql、sqlserver、orcle数据库的baseDao类
  11. Android TV开发总结(五)TV上屏幕适配总结
  12. 589页22万字城市智慧应急指挥中心大数据信息化系统整体设计方案
  13. 使用Kali Linux系统生成木马病毒并实现远程控制计算机
  14. sql未保存文档找回
  15. CSS开发中所有基本属性的使用技巧
  16. PyTorch 和 TensorFlow的区别
  17. 计算机毕设之电影购票系统
  18. 从键盘上输入一个字符,判断并输出是控制符、数字字符、大写字母、小写字母或是其他字符
  19. Android挂断电话流程
  20. VC 出错 msdev.exe错误

热门文章

  1. 轻松查询多个中通速递发出物流中含有某个城市的单号
  2. 数据禾|长江经济带主要城市坡度数据
  3. 申请百度语音识别API 接口-免费
  4. Leach协议的实现
  5. 算法——实现随机拿到30道不重复的20以内的加减法题目
  6. 青藤云中间商一面面经
  7. 零基础应该怎么学剪辑,大概要学多长时间?在磨金石教育学靠谱吗?
  8. 为什么相机模型假设成像平面位于焦平面?
  9. 基于深度卷积神经网络的图像超分辨率重建(SRCNN) 学习笔记
  10. Js 实现十六进制颜色值和RGB颜色值转换整理