這裏寫自定義目錄標題
IOC概念和Spring中的IOC
Inversion 0f Control 把創建對象的權利交給框架。它包括Dependency Injection 和 Dependency Lookup。
IOC作用:消減計算機程序的耦合(依賴關係)。
Spring中基於XML的IOC環境搭建
ApplicationContext的三個實現類:
- ClassPathXMLApplicationContext:它可以加載類路徑下的配置文件,要求配置文件必須在類路徑下,不在的話加在不了。
- FileSystemXMLApplicationContext:它可以加載磁盤任意路徑下的配置文件(必須由訪問權限)
- AnnotationConfigApplicationContext
核心容器的兩個接口引發出的問題:
ApplicationContext: 單例對象適用
它在構建核心容器時,創建對象採取的策略是採用立即加載的方式,只要讀完配置文件馬上就創建配置文件中配置的對象。
BeanFactory: 多例對象適用
它在創建核心容器時,創建對象採取的策略是採用延時加載的方式,即什麼時候根據ID獲取對象了,什麼時候創建對象。
Spring對bean的管理細節
創建bean的三種方式
第一種方式:使用默認構造函數創建。
在spring的配置文件中使用bean標籤,配以id和class屬性之後,且沒有其他屬性和標籤時。 採用的就是默認構造函數創建bean對象,此時如果類中沒有默認構造函數,則對象無法創建。
第二種方式: 使用普通工廠中的方法創建對象(使用某個類中的方法創建對象,並存入spring容器)
<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
第三種方式:使用工廠中的靜態方法創建對象(使用某個類中的靜態方法創建對象,並存入spring容器)
<bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>
bean對象的作用範圍
bean標籤的scope屬性:用於指定bean的作用範圍
取值:
singleton:單例的(默認值)
prototype:多例的
request:作用於web應用的請求範圍
session:作用於web應用的會話範圍
global-session:作用於集羣環境的會話範圍(全局會話範圍),當不是集羣環境時,它就是session
全局session:
bean對象的聲明週期
單例對象:
出生:當容器創建時對象出生
活着:只要容器還在,對象一直活着
死亡:容器銷燬,對象消亡
總結:單例對象的生命週期和容器相同
多例對象:
出生:當我們使用對象時Spring爲我們創建
活着:對象只要是在使用過程中就一直活着
死亡:當對象長時間不使用,並且沒有別的對象引用時,垃圾回收機制銷燬對象
總結:
依賴注入(Dependency Injection)
依賴注入:
Dependency Injection
IOC的作用:
降低程序間的耦合(依賴關係)
依賴關係的管理:
以後都交給spring來維護
在當前類需要用到其他類的對象,由spring爲我們提供,我們只需要在配置文件中說明
依賴關係的維護:
就稱之爲依賴注入。
依賴注入三種類型:
能注入的數據:有三類
注入的方式:有三種
第一種:使用構造函數提供
基本類型和String
其他bean類型(在配置文件中或者註解配置過的bean)
複雜類型/集合類型
構造函數
使用的標籤:constructor-arg
標籤出現的位置:bean標籤的內部
標籤中的屬性
type:用於指定要注入的數據的數據類型,該數據類型也是構造函數中某個或者某些參數的類型
index:用於指定要注入的數據給構造函數中指定索引位置的參數賦值。索引的位置是從0開始。
name:用於指定給構造函數中指定名稱的參數賦值
以上三個屬性用於指定給構造函數中哪個參數賦值
value:用於提供基本類型和string類型的數據
ref:用於指定其他的bean類型數據。它指在Spring的IOC核心容器中出現過的bean對象
優勢:
在獲取bean對象時,注入數據是必須的操作,否則對象無法創建成功。
弊端:
改變了bean對象的實例化方式,使我們創建對象時,如果用不到這些數據,也必須提供。
第二種:使用set方法提供
set方法注入
設計的標籤:property
出現的位置:bean標籤的內部
標籤的屬性:
name:用於指定注入時所調用的set方法名稱
value:用於提供基本類型和string類型的數據
ref:用於指定其他的bean類型數據。它指在Spring的IOC核心容器中出現過的bean對象
優勢:
創建對象時沒有明確的限制,可以直接使用默認構造函數
弊端:
如果有某個成員必須有值,則獲取對象是有可能set方法沒有執行
複雜類型的注入:
用於給List結構集合注入的標籤:List、Array、Set
用於給Map結構結合注入的標籤:Map、Props
結構相同,標籤可以互換。
①定義類,生成set方法
在配置文件配置,每一個類型配置相應的數據:
結果:
第三種:使用註解提供
詳情後續~~