Spring學習筆記01_什么是IoC和DI
標簽: Java
控制反轉
- 控制反轉(Inversion of Control,縮寫為
IoC
),是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度。 - IoC很好的體現了面向對象設計法則之一—— 好萊塢法則:
“別找我們,我們找你”
;即由IoC容器幫對象找相應的依賴對象并注入,而不是由對象主動去找。 - 其中最常見的方式叫做
依賴注入
(Dependency Injection,簡稱DI),還有一種方式叫依賴查找
(Dependency Lookup)。 - 思想上的轉變
依賴注入
- 通過依賴注入機制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。
兩中常見注入方式
1、構造函數注入
<!-- 使用構造函數的方式,給 service 中的屬性傳值
要求:
類中需要提供一個對應參數列表的構造函數。
涉及的標簽:
constructor-arg
屬性:
index:指定參數在構造函數參數列表的索引位置
type:指定參數在構造函數中的數據類型
name:指定參數在構造函數中的名稱 用這個找給誰賦值
==========上面三個都是給誰賦值,下面兩個指的是賦什么值的==============
value:它能賦的值是基本數據類型和 String 類型
ref:它能賦的值是其他 bean 類型,也就是說,必須得是在配置文件中配置過的 bean
-->
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<constructor-arg name="name" value="張三"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>
<bean id="now" class="java.util.Date"></bean>
2、set 方法注入
<!-- 通過配置文件給 bean 中的屬性傳值:使用 set 方法的方式
涉及的標簽:
property
屬性:
name:找的是類中 set 方法后面的部分
ref:給屬性賦值是其他 bean 類型的
value:給屬性賦值是基本數據類型和 string 類型的
實際開發中,此種方式用的較多。
-->
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<property name="name" value="test"></property>
<property name="age" value="21"></property>
<property name="birthday" ref="now"></property>
</bean>
<bean id="now" class="java.util.Date"></bean>
注入集合屬性 (用的也是set方法注入的方式)
- 類中的相關屬性:
public class AccountServiceImpl implements IAccountService {
String[] myStrs;
List<String> myList;
Set<String> mySet;
Map<String,String> myMap;
Properties myProps;
...
}
bean.xml
<!-- 注入集合數據
List 結構的:
array,list,set
Map 結構的
map,entry,props,prop
-->
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<!-- 在注入集合數據時,只要結構相同,標簽可以互換 -->
<!-- 給數組注入數據 -->
<property name="myStrs">
<set>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</set>
</property>
<!-- 注入 list 集合數據 -->
<property name="myList">
<array>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</array>
</property>
<!-- 注入 set 集合數據 -->
<property name="mySet">
<list><value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</list>
</property>
<!-- 注入 Map 數據 -->
<property name="myMap">
<props>
<prop key="testA">aaa</prop>
<prop key="testB">bbb</prop>
</props>
</property>
<!-- 注入 properties 數據 -->
<property name="myProps">
<map>
<entry key="testA" value="aaa"></entry>
<entry key="testB">
<value>bbb</value>
</entry>
</map>
</property>
</bean>
智能推薦
Spring IOC和DI
Spring的簡單介紹 為什么要使用spring? 我們的三層架構之間仍然有少量的耦合,為了達到理想的高內聚、低耦合狀態,spring是一個很好的選擇。 spring是什么? Spring是一個分層的Java SE/EE full-stack輕量級開源框架 spring的核心 IOC=Inverse Of Control控制反轉 AOP=Aspect OrientedProgramming面向切面...
spring ioc和di
很多人認為IOC就是DI他們之間是對等的,其實不然。 很多文章中都提到他們的分別依賴: 誰依賴于誰?為什么需要依賴? 注入:誰注入于誰?到底注入什么? 控制反轉:誰控制誰?控制什么? 這種描述很難讓別人理解,感覺有點教科書的意味。下面我就簡單的說下我的看法: 一、IOC和DI區別 IOC( inversion of control)控制反轉,控制反轉是一種思想,結合程序通俗的講,創建對象的方式反轉...
Spring是什么?IOC和DI詳細介紹。
Spring是什么 Spring是應用了很多優秀的設計模式,對于項目的實現,提供了優秀的解決方法;Spring是一個輕量級(低侵入)MVC和邏輯代碼框架. 類與類之間的解耦合。 Spring就像蓋幾十層大樓的時候,提前準備好了一個非常非常完整的一個樓體框架,所有的結構,內部線路,水管,都已經設計好了,剩下的就是每個住戶自己互不干擾的裝修,這個Spring框架就是一個非常完整的體系結構,里面包含了對...
hualinux spring 3.2:什么是反轉控制IOC和依賴注入DI及關系(新手必看)
目錄 一、什么是IOC、DI 二、依賴注入的好處 附錄一、 IOC好處 附錄二、spring的依賴注入如何降低了耦合 如果新手開始沒在搞清楚什么是IOC反轉控制)和DI(依賴)注入,越學到后面越懵,所以前提概念一定要學清楚。 我將在后一章詳細說下,現在是概說 一、什么是IOC、DI 根據百度百科IOC概念: 控制反轉(Inversion of Control,縮寫為IoC),...
Spring學習筆記——一、控制反轉(IOC)和依賴注入(DI)
文章目錄 第一部分 IOC控制反轉和DI依賴注入 A、IOC控制反轉 一、程序的耦合和解耦 解耦例子:JDBC驅動 解耦例子:工廠模式 三層架構 工廠設計模式存在的問題和改造 二、使用Spring解決程序耦合 準備工作 修改表現層代碼,通過spring創建對象 三、使用XML配置文件實現IOC詳解 ApplicationContext方式 ApplicationContext三個常用實現類 Bea...
猜你喜歡
Spring學習筆記六、理解IOC(控制反轉)和DI依賴注入
DI 是IOC的一種具體實現 一、Spring 的兩個核心部分AOC 和AOP 1、IOC:控制反轉,把對象的創建過程交給Spring進行管理。 1)底層原理xml解析、工廠模式、反射 2)IOC 思想基于IOC 容器實現,底層是對象工廠 3)Spring提供IOC 容器實現的兩種方式:(兩個接口) BeanFactory:加載配置文件時不會創建對象,在對象獲取的時候才會去創建。 Applicat...
Spring 之IOC和DI
原來在開發中,創建對象時總是利用關鍵字new實例化一個對象。通過主動實例化創建對象。這樣導致很多對象無法被回收,并且如果類之間有依賴關系,就會有很高的耦合度。下面給出原來的實現方式。 1.IOC 如果需要修改UserService 的實現類,那么demo01的代碼內容也要修改。軟件開發的原則低耦合,所以想辦法依靠配置文件動態給出完整類名,然后利用反射機制生成對象。這就是IOC(控制反轉)即手動創建...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...