(1)控制反轉,把物件建立和物件之間的呼叫過程,交給spring進行管理。
(2)使用ioc目錄:為了耦合度降低
底層用到 xml解析、工廠模式、反射
下面案例通過在userservice中呼叫userdao中的add()的需求來演示ioc的原理
直接呼叫原始方式
class userservice{
execute(){
userdao dao = new userdao();
dao.add();
}}
class userdao
工廠模式
解決思路,通過工廠方法use***ctory實現兩個類之間的結構,但是該方法解耦不夠徹底
目的:耦合度降低到最低限度,顯然這種模式雖然解耦了兩個類,但是增加userservice 與use***ctory的耦合度。
class userservice{
execute(){
userdao dao = use***ctory.getdao();
dao.add();
}}
class userdao
class use***ctory
}
ioc過程
第一步:xml配置檔案,配置建立的物件
第二步 有service類和dao類,建立工廠類
class use***ctory
}
第三步 與工廠模式呼叫方式相同
這樣就可以實現ioc
ioc思想基於ioc容器完成,ioc容器底層就是物件工廠
spring提供ioc容器實現兩種方式:(兩個介面)
(1) beanfactory:ioc容器基本實現,是spring內部的使用介面
載入配置檔案的時候不會建立物件,在獲取物件(使用)才建立物件
(1)spring建立物件
(2) spring注入屬性(1) 基於xml配置檔案方式實現
(2)基於註解方式實現
(1)在spring配置檔案中,使用bean標籤,標籤中新增對應的屬性,就可以實現物件的建立
(2)常用bean標籤屬性
id屬性:唯一標識
class屬性:類全路徑(包類路徑)
name屬性:與id相同,但其中可以加特殊符號,為早期struct1提供,現在已經沒人用了
(3)建立物件時候,預設也是執行無參構造方法完成 物件的建立(1)di:依賴注入,就是注入屬性
第一種注入方式:使用set方式進行注入
建立類,定義屬性和對應的set方法
public class book
public void setbauthor(string bauthor)
}
在spring配置檔案中配置物件建立,配置屬性注入
測試**
@test
public void testadd()
第二種注入方式:使用有參構造進行注入
建立類,定義屬性,建立屬性對應有參構造
/**
1. 使用有參構造注入
*/public class orders
}
在spring配置檔案中進行配置
測試
第三種 p命名空間注入(了解)
使用p命名空間注入,可以簡化基於xml配置方式,新增p命名空間在配置檔案中
進行屬性的注入
測 Spring學習一之IOC工作原理 3
例項3 對例項2進行重構 增加helloworldfactory類 package com.nantian.spring.example3 import com.nantian.spring.example3.filehellostr 注入hellworld和hellostr依賴 author ps...
Spring學習一之IOC工作原理 4
上述幾篇內容都沒有涉及到spring的內容,就是為了更好地闡述spring的工作原理 如圖 如下 helloworld.properties 如圖 再重構helloworldclient類 如下 package com.nantian.spring.example4 import org.apach...
IOC實現原理
ioc 也就是 控制反轉 了,不過更流行的叫法是 依賴注入 di dependency injection 聽起來挺高深,其實實現起來並不複雜。下面就看看如何來實現這個輕量級 ioc 框架。從例項出發,先看看以下 action bean public class productaction exte...