其實我們不妨大膽面對這個問題,因為日誌信息已經說的比較直接了。我們來翻譯壹下:
Jdk動態代理和C接口壹起描述。這是什麽意思?說明它強調的是這個動態代理是面向接口的,而不是面向java類的!
所以它認為不能作為java類註入到其他對象中;
為什麽不呢?
因為jdk動態代理包裝了類,所以本機類型隱藏了(->;Target),壹個只代表接口實現的新類出現;也就是接口聲明的方法,新類會有。
如果您堅持將這個新類註入到其他bean實例中,您可能會在運行時拋出異常,因為您調用的方法沒有在接口中聲明;
為什麽不正常?因為新類中沒有這樣的方法。
而這在編譯時是找不到的,所以spring幫妳提前防禦,在啟動時拋出壹個錯誤,而不是等待運行時。
所以解決方案如下:
如果需要使用C接口中沒有聲明的類本身的方法,可以從B中取出原生類型實例,調用它。