當前位置:編程學習大全網 - 網站源碼 - 因為它是JDK動態代理,實現了

因為它是JDK動態代理,實現了

我搜了幾篇文章,都說可以用proxy-target-class=true或者transactional來解決。解決方法要麽跟問題本身的弱點有關,要麽跟曲線救國有關。

其實我們不妨大膽面對這個問題,因為日誌信息已經說的比較直接了。我們來翻譯壹下:

Jdk動態代理和C接口壹起描述。這是什麽意思?說明它強調的是這個動態代理是面向接口的,而不是面向java類的!

所以它認為不能作為java類註入到其他對象中;

為什麽不呢?

因為jdk動態代理包裝了類,所以本機類型隱藏了(->;Target),壹個只代表接口實現的新類出現;也就是接口聲明的方法,新類會有。

如果您堅持將這個新類註入到其他bean實例中,您可能會在運行時拋出異常,因為您調用的方法沒有在接口中聲明;

為什麽不正常?因為新類中沒有這樣的方法。

而這在編譯時是找不到的,所以spring幫妳提前防禦,在啟動時拋出壹個錯誤,而不是等待運行時。

所以解決方案如下:

如果需要使用C接口中沒有聲明的類本身的方法,可以從B中取出原生類型實例,調用它。

  • 上一篇:引導源代碼分析js
  • 下一篇:微信上被騙了200元紅包。警察會管嗎?
  • copyright 2024編程學習大全網