Java-Spring:java.lang.ClassCastException: com.sun.proxy.$Proxy* cannot be cast to***問題解決方案


java.lang.ClassCastException: com.sun.proxy.$Proxy* cannot be cast to***問題解決方案

臨床表現

病例

定義代理類:

@Transactional
@Repository
public UserDaoImpl implements UserDao extends BaseDaoImpl{
/*沒有實現任何接口*/
}

獲取代理類:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDaoImpl userDaoImpl = (UserDaoImpl)ctx.getBean("userDaoImpl");

報錯:

java.lang.ClassCastException: com.sun.proxy.$Proxy12 cannot be cast to UserDaoImpl

病因:
  對於Spring AOP 采用兩種代理方法,一種是常規JDK,一種是CGLIB,我的UserDao了一個接口IUserDao,當代理對象實現了至少一個接口時,默認使用JDK動態創建代理對象,當代理對象沒有實現任何接口時,就會使用CGLIB方法。由於UserDAOImpl實現了UserDAO接口,所以強制轉換必須用父類UserDAO來定義

 

解決方法

  如果你的代理對象沒有實現接口的方法,就將代理對象轉換成接口。
  獲取代理類的代碼該為: 

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDaoImpl)ctx.getBean("userDaoImpl"); 


免責聲明!

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



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