zbb20180915 動態代理類型轉換失敗的問題--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to


解決spring使用動態代理類型轉換失敗的問題--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...

今天在學習spring aop中的動態代理時,碰到了一個類型轉換的問題:java.lang.ClassCastException: com.sun.proxy.$Proxy8 cannot be cast to com.bjsxt.service.UserServiceImpl01_AOP.
首先介紹一下spring的動態代理。
spring使用的動態代理有兩種:JDK Proxy 和CGLIB。使用前者必須實現至少一個接口才能實現對方法的攔截。使用后者需要兩個jar包:asm.jar和cglib.jar,並修改spring配置文件。
  我在測試時使用了JDK Proxy,經過查找資料找到了問題的原因。下面是我的測試用例:

ApplicationContext ac = new ClassPathXmlApplicationContext("./com/bjsxt/springconfig/annotation_01_AOP.xml");
UserServiceImpl01_AOP userService = (UserServiceImpl01_AOP)ac.getBean("userServiceImpl01_AOP");

userService.method3();

   原因:紅色部分即為報錯的根源。不能用接口的實現類(UserServiceImpl01_AOP)來轉換Proxy的實現類,它們是同級,應該用共同的接口來轉換。將紅色代碼修改:

UserService01_AOP userService = (UserService01_AOP)ac.getBean("userServiceImpl01_AOP");//UserService01_AOP是接口

  修改之后,程序運行正常。

  讀者可以了解一下JDK Proxy的工作原理,然后會很容易理解這個錯誤出現的原因。

com.sun.proxy.$Proxy0 cannot be cast to ** 解決方法

我在學習用.xml配置文件spring整合hibernate, 這是遇到的問題 這是文件目錄 這是配置文件 這是測試方法 解決方法 解決位置 加代碼: proxy-targ...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM