在使用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才能...