1. 程式人生 > >2.1 Spring宣告式事務的實現方式選擇(JDK動態代理與cglib)

2.1 Spring宣告式事務的實現方式選擇(JDK動態代理與cglib)

1、簡介Spring宣告式事務的具體實現方式是動態決定的,與具體配置、以及事務代理物件是否實現介面等有關。2、使用JDK動態代理的情況在滿足下面兩個條件時,Spring會選擇JDK動態代理作為宣告式事務的實現方式。(1)事務代理類必須實現介面且不能顯式繼承父類(Object這個父類不算)。(2)配置:springboot的啟動類要加上@EnableTransactionManagement和@EnableAspectAutoProxy註解,且其中的proxyTargetClass屬性要為預設的fasle,如果設定成了true就會開啟cglib。注意:在這種情況下,@Transcation註解可以加在事務代理物件所實現的介面的方法上,也可以加在具體的實現類上。
3、使用cglib的情況除了上述情況,Spring 會採用cglib方式來實現宣告式事務。(1)比如業務類未實現介面。(2)proxyTargetClass=true時。當然,在這種情況下,@Transcation註解只能加在具體的實現類上。由於Spring事務的具體實現方式未知,因此推薦把註解加在實現類上,不然會帶來很多的問題。