1. 程式人生 > >CGLIB Common causes of this problem include using a final class or a non-visible class;

CGLIB Common causes of this problem include using a final class or a non-visible class;

類似以下的spring錯誤資訊:

org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class $Proxy145]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy145

 

解決問題的檢查點:

1、需要AOP攔截的類是否是final的,final類不可使用CGLIB來代理。

2、是否在給BEAN配AOP的時候強制使用CGLIB,如果是則可指定proxyTargetClass屬性以讓spring強制代理目標類。

3、類是否被多次代理了,如果類被多次代理過,則第二次進行代理的時候拿到的是第一次代理後的物件,這個物件是個final形式的,所以會出現這個錯誤。

 

基於第三點要注意,類是否被多次程式碼不緊緊取決於類是否被配置了多次AOP,如果類實現了某個介面,則還要看類實現的介面是否被aop攔截過。如果類實現了介面且介面也被AOP攔截了,則很可能出現上面的錯誤(是否出錯取決於AOP代理執行的順序)。