文档章节

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

hyssop
 hyssop
发布于 2014/12/06 22:01
字数 478
阅读 97
收藏 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
159
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS盒子模型

一、什么叫框模型 页面元素皆为框(盒子) 定义了元素框处理元素内容,内边距,外边距以及边框的计算方式 二、外边距 围绕在元素边框外的空白距离(元素与元素之间的距离) 语法:margin,定...

wytao1995
今天
4
0
Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部