文档章节

哪些方法不能够实施Spring AOP事务

hyssop
 hyssop
发布于 2014/12/06 22:01
字数 478
阅读 93
收藏 1

哪些方法不能够实施Spring AOP事务

由于Spring事务管理是基于接口代理或动态字节码技术。通过AOP实施事务增强。

基于接口动态代理的AOP事务增强,接口方法必须都是public的。

实现类的方法也必须都是public的。不能够有protected、private、final

基于CGLib字节码动态代理的方案是通过扩展被增强类,动态创建子类的方式进行AOP增强植入的。

由于final、static private修饰的方法不能够被子类覆盖。想用的,该方法就无法实施AOP增强。


<aop:config proxy-target-class="true">

   <aop:pointcut id="serviceJdbcMethod" expretion="execution(* com.baobaotao.special.UserService.*(..))"/>

<asp:advisor pointcut-ref="serviceJdbcMethod" advice-ref="jdbcAdvice" order="0"/>

</aop:config>


<tx:advice id="jdbcAdvice" transaction-manager="jdbcManager">

   <tx:attributes>

       <tx:method name="*"/>

   </tx:attributes>


</tx:advice>

  不能被Spring Aop事务增强的方法

序号

动态代理策略

不能被事务增强的方法

1

基于接口的动态代理

除public以外其它所有的方法,此外public static也不能够被增强

2

基于CGLIB的动态代理

private 、static、final方法。


这些不能够被事务增强的方法也可以通过其它事务调用该方法被纳入到事务当中来。他们不能够被spring Aop直接事务增强,但是外层方法的事务上下文依旧可以顺利地传播到这些方法中。


在编写数据库连接的时候一定不要产生连接泄露的情况。在有事务的环境下使用spring提供的DataSourceutils 可以由spring保证无连接泄露,在么有事务环境下面,我们需要通过手动在finally上执行 

DataSourceUtils.releaseConnection(conn,getDataSource());

另外一种能够保证连接不泄露的方法就是数据源




java API反射类

java.lang.reflect.invocationHandler

java.lang.refect.Method

java.lang.reflect.Proxy


 




© 著作权归作者所有

上一篇: tomcat知识点总结
下一篇: linux awk、grep应用
hyssop
粉丝 20
博文 102
码字总数 111521
作品 0
昌平
程序员
私信 提问
Spring的事务管理难点剖析(6):特殊方法成漏网之鱼

由于Spring事务管理是基于接口代理或动态字节码技术,通过AOP实施事务增强的。虽然Spring还支持AspectJ LTW在类加载期实施增强,但这种方法很少使用,所以我们不予关注。 对于基于接口动态代...

icheer
2012/07/17
59
0
Spring 事务管理高级应用难点剖析: 第 2 部分

Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特色,各有千秋。像 Hibernate 是非常优秀的 ORM 实现方案,但对底层 SQL 的控制不太方便;而 iBatis 则通过模板化技术让您方便地控制...

红薯
2010/03/28
801
1
这15个经典的Spring面试常见问题你都了解吗?来看看吧

点关注,不迷路;持续更新Java架构相关技术及资讯热文!!! 这篇文章主要是想通过一些问题,加深大家对于 Spring 的理解,所以不会涉及太多的代码!这篇文章整理了挺长时间,下面的很多问题...

Java_苏先生
06/05
0
0
Spring高级事务管理难点剖析

1Spring事务传播行为 所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring支持7种事务传播行为 PROPAGATION_REQUIRED(加入已有事务) 如果当前没有事务,就新建...

蛙牛
2014/08/23
7.4K
12
Spring 声明式注解事务实现机制

Spring中注解事务实现机制 在使用@Transactional 注解管理事务时步骤很简单。但是如果对@Transactional理解不够透彻,很容易出现事务不起作用的情况。所以,在对@Transactional的实现机制要有...

狂奔的熊二
2018/09/21
142
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
3
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
7
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部