Spring 注入實現類報錯問題

2021-08-31 00:24:32 字數 687 閱讀 3211

在使用spring 時,假如在controller中注入了impl 實現類可能會出現報錯的情況。

為什麼是「可能」,① 假如沒用使用spring aop ,則不會報錯。

② 類沒用使用介面也不會報錯。

1、為什麼使用 aop 會導致報錯:

spring aop的實現是基於動態**

如果目標物件實現了介面,那麼在預設情況下會採用jdk的動態**實現aop。

如: 介面 a

實現類 aimpl

**類b

//通過jdkproxyfactory建立**物件

jdkproxyfactory factory = new jdkproxyfactory(aimpl);

aimplproxy b= factory.createproxy();

//這個增強類物件b 只能強轉為a,而不能轉為aimpl,因為jdk**得到的b類與aimpl是兄弟關係而非父子

解決方式:xml配置,強制使用cglib 方式(低版本spring 可能需要引入cglib的jar 包)

2、為什麼沒有介面的不會報錯

如果沒有介面,則會使用cglib 動態**方式。

cglib使用繼承的方式實現**。所以不需要介面。

因為是繼承,所以被**的目標最好不要使用 final

Spring注入問題

先簡單說說我的系統構造 sturts2.0.11 spring2.0 hibernate3.1 這三個xml檔案,分別用於注於dao,service,在service裡注入dao沒有問題。我的問題如下 initservlet com.init.initservlet 2 以達到在系統啟動時初始化系統...

spring注入問題

之前模擬了下spring的aop動態 出現了無法注入的問題,導致空指標異常 transactionmanager自定義事務管理器 component value tm public class transactionmanager catch exception e 提交事務 public void...

Spring 靜態類注入

用過spring的都知道我們在dao service層加上 repository service就能將這兩個物件交給spring管理,在下次使用的時候使用 resource 或者 autowired 就可以拿到而不需要自己去new就可以使用dao層方法。但是在控制層必須加上 controller才能...