javascript
哪些方法不能够实施Spring AOP事务
2019獨角獸企業重金招聘Python工程師標準>>>
哪些方法不能夠實施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
總結
以上是生活随笔為你收集整理的哪些方法不能够实施Spring AOP事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rackspace进中国,坚决“不掉价”
- 下一篇: matlab 学习之常用函数2