1. 程式人生 > >Spring AOP 學習筆記

Spring AOP 學習筆記

1、Spring AOP中的動態代理主要有兩種方式,JDK動態代理和CGLIB動態代理。JDK動態代理通過反射來接收被代理的類,並且要求被代理的類必須實現一個介面。JDK動態代理的核心是InvocationHandler介面和Proxy類。如果目標類沒有實現介面,那麼Spring AOP會選擇使用CGLIB來動態代理目標類。

2、@Transactional宣告式事務

    Spring事務管理是通過Spring AOP增強實現的。應該是掃描只要含有註解Transactional,例項化時,就會生成基於委託類的代理類物件進行事務增強。

3、@Transactional什麼情況下會失效?

    (1)丟擲的異常是否支援事務回滾?預設回滾UnChecked異常,如果需要回滾Checked異常需要配置

    (2)修飾的方法是否是public修飾符?protected修飾符雖然可以被子類重寫,但是在Aop中是無法找到protected修飾的方法的,因為AOP取的是所有public方法(見參考1)

    (3)是否含有final修飾符?因為CGLIB需要繼承被代理的類,所以方法和類不能加final修飾符。(如果有final修飾符,肯定不能實現介面的,因為介面不支援final修飾符)

    (4)確認事務方法是不是通過代理類呼叫的?如果是直接內部方法呼叫,則事務不生效。原因待分析。

4、如果想要在protected和private修飾的方法上註解 @Transactional怎麼辦?

 

 

參考

 1、關於spring的aop攔截的問題 protected方法代理問題