spring事務註解@Transactional - proxy-target-class

事務註解@Transactional

spring使用註解事務的時候,需要在配置文件裏面進行如下配置:

<!--開啓註解事務-->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

proxy-target-class

proxy-target-class=“true”
基於類的代理將起作用(cglib庫)

proxy-target-class=“false”
基於接口的代理將起作用(標準的JDK,默認選項)
高版本spring自動根據運行類選擇JDK或CGLIB代理

cglib動態代理和jdk動態代理的區別

JDK動態代理只能對實現了接口的類生成代理,而不能針對類。
CGLIB是針對類實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法,因爲是繼承,所以該類或者方法最好不要生命成final。

proxy-target-class在spring事務、aop、緩存這幾塊都有設置,其作用都是一樣的

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<aop:config proxy-target-class="true">
<cache:annotation-driven proxy-target-class="true"/>

事務異常

在service方法上加@Transactional註解,或者在@Component類加@Transactional註解,報錯but was actually of type [com.sun.proxy.$Proxy72]

錯誤日誌

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: 

nested exception is java.lang.IllegalArgumentException: com.sun.proxy.$Proxy72

解決方法

加proxy-target-class="true"屬性


思想
要了解人們提出意見的過程和邏輯
無論你向誰提問,對方一般都會提供“答案”,所以要仔細考慮向誰提問
讓每個人都可肆意評論其他人的觀點,此舉低效且浪費時間。
提防以“我以爲…”爲開頭的發言。
系統梳理員工的工作記錄,評估其發言的可信度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章