【Java】報(bào)錯(cuò) "com.sun.proxy.$Proxy cannot be cast to"

一.問(wèn)題分析

1.報(bào)錯(cuò)背景

遇到這個(gè)問(wèn)題是在類型轉(zhuǎn)換時(shí),如下:

    WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());

    PassApiServiceImpl service = (PassApiServiceImpl) wac.getBean("passApiService");

2.錯(cuò)誤分析

2.1 知識(shí)點(diǎn):

Spring AOP實(shí)現(xiàn)方式有兩種

1:使用JDK動(dòng)態(tài)代理,如果被代理的目標(biāo)實(shí)現(xiàn)了至少一個(gè)接口,則會(huì)使用JDK動(dòng)態(tài)代理,所有該目標(biāo)類型實(shí)現(xiàn)的接口都將被代理。

2:通過(guò)CGLIB來(lái)為目標(biāo)對(duì)象創(chuàng)建代理,若該目標(biāo)對(duì)象沒有實(shí)現(xiàn)任何接口,則創(chuàng)建一個(gè)CGLIB代理,創(chuàng)建的代理類是目標(biāo)類的子類。

2.2 錯(cuò)誤分析

那根據(jù)我遇到的情況分析,我的PassApiServiceImpl實(shí)現(xiàn)了PassApiService接口,aop應(yīng)該是使用了JDK Proxy。

而報(bào)錯(cuò)的原因,是不能用接口的實(shí)現(xiàn)類(PassApiServiceImpl)來(lái)轉(zhuǎn)換Proxy的實(shí)現(xiàn)類,它們是同級(jí),應(yīng)該用共同的接口(PassApiService)來(lái)轉(zhuǎn)換。

二.解決方案

1.使用接口來(lái)進(jìn)行類型轉(zhuǎn)換,將PassApiServiceImpl改為PassApiService。

    WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());

    PassApiService service = (PassApiService) wac.getBean("passApiService");

三.其他解決方案

看到有一種解決方案是強(qiáng)制使用CGLIB創(chuàng)建代理,需要引用jar包并修改spring配置文件。我沒有使用,有機(jī)會(huì)再進(jìn)行了解吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書筆記,整理的知識(shí)點(diǎn),也是為了防止忘記,尊重勞動(dòng)成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 12,444評(píng)論 6 86
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,803評(píng)論 11 349
  • Day8《高效能人士的七個(gè)習(xí)慣》閱讀輸出 閱讀內(nèi)容:第八章 習(xí)慣五 知彼解己 閱讀心得: 第一遍這本書的時(shí)候,我并...
    道長(zhǎng)歸來(lái)閱讀 247評(píng)論 0 0
  • bower的安裝 1,首先在我的系統(tǒng) 安裝 nodejs。因?yàn)槲业南到y(tǒng)是windows,還需要安裝msysgit,...
    JerryChen_閱讀 74,241評(píng)論 4 10
  • 苦惱于自己的不自覺和懶。 于是乎就痛痛快快得來(lái)一次時(shí)間計(jì)劃吧。 為期1000hours , 42天。 每個(gè)小時(shí)都在...
    qovciu閱讀 185評(píng)論 0 1

友情鏈接更多精彩內(nèi)容