Spring aop-本类方法调用切面增强失效
来源:互联网 发布:人声模拟软件 编辑:程序博客网 时间:2024/06/05 15:35
http://blog.csdn.net/u013076044/article/details/52954033
在我们使用spring的时候,往往会遇到在本类被aop代理的时候,访问本类其他被代理的方法,发现并没有被代理。那么我们应该如何实现呢
xml配置
- 1
- 2
- 1
- 2
Java
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
详情请看 文章,点击进入
在说一下事务传播行为
- 1
- 2
- 1
- 2
首先分析一下第一种情况
1. b在执行的时候会新建一个事务并把当前a的事务挂起,b在执行的时候回滚。那么a也会接受到此exeception并回滚
2. 在a方法中抛出异常并回滚,但是现在b已经执行完毕了,已经commit了,那么只有a会回滚。
=====================2017 - 04 - 23=========================
现在发现上面说的都是屁话
完全不知道当时在想些什么
现在重新陈述一遍
现在的需求是 我在a方法中直接调用的b的时候,会发生的状况就是 a 回滚的b也回滚了 很气 虽然没有合适的业务场景说明 a回滚的时候不需要b回滚。但是我们需要a回滚的情况下 b不需要回滚。
如果我们直接调用this.b()的话 确实是 ab 一起回滚。因为都是在一个事务里面。
但是我们的初衷在b上面标注b开启一个新的事务。那么这种情况下
b是一个新的事务。a回滚的时候b已经commit了
那么我们目的就达到了。
这样的需求的解决方法就是: 在a调用的b方法上是已经被增强的b方法。那么我们就需要找到此时的代理类。增强了b方法的类。也就是当前线程中的代理类。
spring提供了这个配置
在配置文件中配置暴露代理类就好了
- 1
- 2
- 1
- 2
通过下面实现日志的切面说明一下
注解
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
切面类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
测试方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
this.b()
打印结果
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
((AService) AopContext.currentProxy()).b()
打印结果
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
可见第二种是我们需要的。我们需要b被增强。
- Spring aop-本类方法调用切面增强失效
- Spring的Bean内部方法调用无法使用AOP切面(CacheAble注解失效)
- Spring Aop 目标对象内部的自我调用无法实施切面的增强处理原因
- Spring配置加事物加扫描dao层 加增强的AOP切面方法
- Spring AOP源码解读2 - 切面和增强的取得
- AOP 同类方法调用无法进入切面
- 【Spring】AOP - 面向切面
- spring aop 定义切面
- Spring AOP切面
- 【Spring】AOP - 面向切面
- Spring AOP切面编程
- spring Aop切面
- spring-Aop切面编程
- Spring的切面 AOP
- spring AOP切面使用
- Spring AOP自定义切面
- Spring AOP面向切面
- 切面优先级 Spring Aop
- 策略模式
- mycat实现原理及配置
- 同步中断与异步中断
- <8/16>集训日记
- MQTT Java客户端Eclipse paho实现数据的发送和接收
- Spring aop-本类方法调用切面增强失效
- 网页样式与自动加载
- Android中关闭所有Activity
- 线程3:线程间通信
- struts2 简单实例
- Python3之urllib库的使用总结
- TCP的2MSL问题
- js获取数组中的最大值或最小值
- Mac原生解决ntfs格式只能读不能写