• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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>
    
    版權聲明:本文為weixin_45749993原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_45749993/article/details/107427972

    智能推薦

    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(控制反轉)即手動創建...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡