AopContext.currentProxy();为什么能获取到代理对象
在同一个类中,非事务方法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();为什么能获取到代理对象相关推荐
- AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...
现在AOP的场景越来越多,所以我们有必要理解下和AOP相关的一些概念和机制. import org.aspectj.lang.reflect.SourceLocation; public interf ...
- spring事务--使用aop事务代理对象调用方法示例
第一种获取aop代理对象的方式: 第二种方式获取aop代理对象:
- mybatis源码解析 - mapper代理对象的生成
1.简单示例 先看一个简单纯粹的mybatis demo(不集成spring等其他框架),代码结构很简单,如下图: 完整代码地址:kingoe/boot-study:mapper层和我们平时说的dao ...
- 你有没有想过,在SpringBoot集成下,Mybatis的mapper代理对象究竟是如何生成的?...
作者:青石路 cnblogs.com/youzhibing/p/10486307.html 前情回顾 之前我们讲到了mybatis操作数据库的流程:先创建SqlSessionFactory,然后创建S ...
- AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑
原来在springAOP的用法中,只有代理的类才会被切入,我们在controller层调用service的方法的时候,是可以被切入的,但是如果我们在service层 A方法中,调用B方法,切点切的是B ...
- 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )
文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...
- Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
概述 如何获取本地数据连接 示例从DBCP数据源中获取Oracle的本地连接对象 相关接口操作 LobCreator LobHandler 插入LOB类型的数据 以块数据的方式读取LOB数据 以流数据 ...
- Spring-AOP @AspectJ进阶之绑定代理对象
概述 实例 概述 使用this()或target()可绑定被代理对象实例,在通过类实例名绑定对象时,还依然具有原来连接点匹配的功能,只不过类名是通过增强方法中同名入参的类型间接决定罢了. 这里我们通过 ...
- Spring AOP 源码分析 - 创建代理对象
1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...
最新文章
- 使用appium做自动化测试时,send_keyss只能输入字母数字,无法输入中文
- 百度投资创维10亿,联手构建智能家居AI生态
- mysql顺序结构_MySQL学习之流程结构
- [BTS2004]一步一步学习BizTalk2004 CBR(content-based routing)
- No space left on device
- 用STL给C++充电:第一部分
- php获取post表单数据_PHP获取POST表单数据
- linux怎么查看fastq格式文件,2020-01-11 了解FASTQ格式并处理FASTQ文件
- python 类与类之间的关系
- eclipse中修改项目文件夹目录显示结构
- 【网络流24题】【LOJ6010】数字梯形(费用流)
- 将图片从AutoCAD导出到Word
- Python日期时间格式转换
- 弘辽科技:拼多多运营做好竞品分析。
- 无需Root实现Android手机屏幕流畅投影到电脑进行演示(附软件下载)
- zigbee 4:协调器/路由器/终端 建立/加入 网络
- Ext Gantt甘特图1.2破解及方法
- 【搜索/tarjan找环】zznu-简单环路
- 百度DNS/阿里DNS/114DNS/谷歌DNS/OpenDNS 对比评测
- c语言幼儿园自动分班,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...
热门文章
- 2016国产开源软件Top100(Q1)
- 这份代码是不是应该有BUG!!
- OOAD实践之路——真实案例解析OO理论与实践(二、第一项任务:特性列表)
- u-boot nand flash read/write cmd
- 数字后端——布图规划
- Texture Inspection 纹理检验halcon算子,持续更新
- 使用halcon将一个圆上的点拟合成圆形并且求出圆心
- HALCON示例程序class_ndim_norm.hdev基于多通道图像的分类
- ABB机器人与PC计算机控制口连接 超级终端 命令清单
- 【pyinstaller打包pyqt5编写的项目为exe(脱离环境可运行)】