在同一个类中,非事务方法A调用事务方法B,事务失效,得采用AopContext.currentProxy().xx()来进行调用,事务才能生效。

B方法被A调用,对B方法的切入失效,但加上AopContext.currentProxy()创建了代理类,在代理类中调用该方法前后进行切入。对于B方法proxyA中调用只能对A进行增强,A里面调用B使用的是对象.B(),而不是$proxy.B(),所以对B的切入无效。

AopContext.currentProxy()使用了ThreadLocal保存了代理对象,因此
AopContext.currentProxy().B()就能解决。

在不同类中,非事务方法A调用事务方法B,事务生效。
在同一个类中,事务方法A调用非事务方法B,事务具有传播性,事务生效
在不同类中,事务方法A调用非事务方法B,事务生效。

Spring中创建动态代理有两种方式,即jdk动态代理、cglib动态代理。
jdk动态代理创建时JdkDynamicAopProxy中的invoke方法中存入的

cglib动态代理CglibAopProxy在创建代理时也存入了

AopContext.currentProxy();为什么能获取到代理对象相关推荐

  1. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...

    现在AOP的场景越来越多,所以我们有必要理解下和AOP相关的一些概念和机制. import org.aspectj.lang.reflect.SourceLocation; public interf ...

  2. spring事务--使用aop事务代理对象调用方法示例

    第一种获取aop代理对象的方式: 第二种方式获取aop代理对象:

  3. mybatis源码解析 - mapper代理对象的生成

    1.简单示例 先看一个简单纯粹的mybatis demo(不集成spring等其他框架),代码结构很简单,如下图: 完整代码地址:kingoe/boot-study:mapper层和我们平时说的dao ...

  4. 你有没有想过,在SpringBoot集成下,Mybatis的mapper代理对象究竟是如何生成的?...

    作者:青石路 cnblogs.com/youzhibing/p/10486307.html 前情回顾 之前我们讲到了mybatis操作数据库的流程:先创建SqlSessionFactory,然后创建S ...

  5. AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑

    原来在springAOP的用法中,只有代理的类才会被切入,我们在controller层调用service的方法的时候,是可以被切入的,但是如果我们在service层 A方法中,调用B方法,切点切的是B ...

  6. 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )

    文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...

  7. Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据

    概述 如何获取本地数据连接 示例从DBCP数据源中获取Oracle的本地连接对象 相关接口操作 LobCreator LobHandler 插入LOB类型的数据 以块数据的方式读取LOB数据 以流数据 ...

  8. Spring-AOP @AspectJ进阶之绑定代理对象

    概述 实例 概述 使用this()或target()可绑定被代理对象实例,在通过类实例名绑定对象时,还依然具有原来连接点匹配的功能,只不过类名是通过增强方法中同名入参的类型间接决定罢了. 这里我们通过 ...

  9. Spring AOP 源码分析 - 创建代理对象

    1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...

最新文章

  1. 使用appium做自动化测试时,send_keyss只能输入字母数字,无法输入中文
  2. 百度投资创维10亿,联手构建智能家居AI生态
  3. mysql顺序结构_MySQL学习之流程结构
  4. [BTS2004]一步一步学习BizTalk2004 CBR(content-based routing)
  5. No space left on device
  6. 用STL给C++充电:第一部分
  7. php获取post表单数据_PHP获取POST表单数据
  8. linux怎么查看fastq格式文件,2020-01-11 了解FASTQ格式并处理FASTQ文件
  9. python 类与类之间的关系
  10. eclipse中修改项目文件夹目录显示结构
  11. 【网络流24题】【LOJ6010】数字梯形(费用流)
  12. 将图片从AutoCAD导出到Word
  13. Python日期时间格式转换
  14. 弘辽科技:拼多多运营做好竞品分析。
  15. 无需Root实现Android手机屏幕流畅投影到电脑进行演示(附软件下载)
  16. zigbee 4:协调器/路由器/终端 建立/加入 网络
  17. Ext Gantt甘特图1.2破解及方法
  18. 【搜索/tarjan找环】zznu-简单环路
  19. 百度DNS/阿里DNS/114DNS/谷歌DNS/OpenDNS 对比评测
  20. c语言幼儿园自动分班,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...

热门文章

  1. 2016国产开源软件Top100(Q1)
  2. 这份代码是不是应该有BUG!!
  3. OOAD实践之路——真实案例解析OO理论与实践(二、第一项任务:特性列表)
  4. u-boot nand flash read/write cmd
  5. 数字后端——布图规划
  6. Texture Inspection 纹理检验halcon算子,持续更新
  7. 使用halcon将一个圆上的点拟合成圆形并且求出圆心
  8. HALCON示例程序class_ndim_norm.hdev基于多通道图像的分类
  9. ABB机器人与PC计算机控制口连接 超级终端 命令清单
  10. 【pyinstaller打包pyqt5编写的项目为exe(脱离环境可运行)】