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

哪些方法不能够实施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


 




转载于:https://my.oschina.net/zjItLife/blog/353280

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值