**:
首先說明,注入的物件確實為實現類的物件。(並不是實現類的**物件,注入並不涉及**)
如果只是單純注入是可以用實現類接收注入物件的,但是往往開發中會對實現類做增強,如事務,日誌等,實現增強的aop技術是通過動態**實現的,而spring預設是jdk動態**,對實現類物件做增強得到的增強類與實現類是兄弟關係,所以不能用實現類接收增強類物件,只能用介面接收。如:
//由於以上原因,如果將物件注入給實現類而非介面的話,在**時就會報錯。介面:ia
//實現類:aimpl
//增強類:aimplproxy
aimpl aimpl = new
aimpl();
//通過jdkproxyfactory建立**物件
jdkproxyfactory factory = new
jdkproxyfactory(aimpl);
aimplproxy aimplproxy =factory.createproxy();
//這個增強類物件aimplproxy 只能強轉為ia,而不能轉為aimpl,因為jdk**得到的aimplproxy類與aimpl是兄弟關係而非父子
解決方法,讓spring強制使用cglib**:
<cglib**類和實現類之間是父子關係,自然可以用父類(實現類)去接收子類物件(**類物件即增強類物件)。aop:aspectj-autoproxy
proxy-target-class
="true"
/>
不過應該不會需要這麼做,使用介面本來就是解耦的,你直接用實現類接收注入物件豈不是失去了注入的意義。(為什麼不直接new乙個呢?)
為什麼要進行介面測試?
1,什麼是介面?可以簡單理解成用來連線而開放的入口,比如前端和後端的連續需要用介面,移動端和後台的鏈結也需要用到介面。連線前端後端和移動端。2,介面都有哪些型別?介面一般分為兩種 1 程式內部的介面 2 系統對外的介面 系統對外的介面 比如你要從別的 或伺服器上獲取資源或資訊,別人肯定不會把資料庫共...
Spring介面注入
如下類 生成 package com.atguigu.crowdfunding.portal.web import org.springframework.beans.bean ception import org.springframework.stereotype.component 在持久層 ...
為什麼要採購訂單而不採購庫存?
一定要採購目前急需的東西,採購應該有了訂單以後再去採購,否則採購來的就是庫存。日本豐田汽車提出 庫存是萬惡之源 戴爾公司的老總說 我們沒有庫存,我們如果有庫存的話,那庫存的只是資訊,我們不庫存具體某個東西,而是庫存某個資訊,把資訊庫存起來。世界500強的首位 沃爾瑪成功經驗有兩點,第一是降低成本,第...