1. 程式人生 > >Spring IOC總結

Spring IOC總結

java

IOC

控制反轉,是一種設計思想,意味著將設計好的對象交給Ioc容器控制,而不是傳統的在對象的內部直接控制。

IOC容器把創建和查找依賴對象的控制權交給了容器,由容器進行註入組合對象。

DI

依賴註入,組件之間的依賴關系由容器在運行期間決定。

Ioc容器註入應用程序某個對象,它所需要的外部資源(包括對象,資源,常量數據)。

Spring Ioc容器

具有依賴註入功能的容器。負責實例化,定位,配置應用程序中的對象及建立這些對象間的依賴。

SpringBeanFactoryIoc容器的實際代表者。BeanFactory接口提供了IoC容器的基本功能。

Spring Ioc容器通過讀取配置文件中的配置元數據,通過元數據對應用中各個對象進行實例化及裝配。

1 xml配置文件進行配置元數據(一般使用)

2 基於註解

3 基於java文件

Spring Ioc容器管理的對象:Bean

Bean就是由Spring容器初始化、裝配及管理的對象,此外bean與應用程序中的其他對象沒有什麽區別.

Bean在容器內部由BeanDefinition對象表示。

BeanDefinition

全限定類名(FQN):用於定義Bean的實現類;(必須的)

Bean行為定義:包括作用域(單例、原型創建)、是否惰性初始化及生命周期等;

Bean創建方式定義:說明是通過構造器還是工廠方法創建Bean

Bean之間關系定義:即對其他bean的引用,也就是依賴關系定義,也就是依賴註入。

Bean的作用域:

1. singleton”(單例,通過單例緩存池實現)

2. prototype”(原型,每次創建全新的bean

3. 另外提供request”、“session”、“global session”三種web作用域;

Spring Ioc容器工作流程:(基於xml配置)

1. 準備配置文件

2. Ioc容器進行解析元數據,創建,組裝bean

3. 客戶端實例化Ioc容器,從容器中獲取需要的bean

Spring IoC容器實例化Bean

根據Bean定義裏的配置元數據使用反射機制來創建Bean

1. 使用無參構造器

2. 靜態工廠

3. 實例工廠

Spring IoC容器註入依賴資源的方式:

1. 構造器註入。

(構造器方式,靜態工廠方式,實例工廠方式都可以)

通過在<bean>中配置構造器實現,構造器參數就是依賴。

配置文件中三種表示參數的方式:參數索引,參數類型,參數名稱

public HelloImpl3(String message, int index) {

this.message = message;

this.index = index;

}

<!-- 通過構造器參數索引方式依賴註入 -->

<bean id="byIndex" class="cn.javass.spring.chapter3.HelloImpl3">

<constructor-arg index="0" value="Hello World!"/>

<constructor-arg index="1" value="1"/>

</bean>

<!-- 通過構造器參數類型方式依賴註入 -->

<bean id="byType" class="cn.javass.spring.chapter3.HelloImpl3">

<constructor-arg type="java.lang.String" value="Hello World!"/>

<constructor-arg type="int" value="2"/>

</bean>

<!-- 通過構造器參數名稱方式依賴註入 -->

<bean id="byName" class="cn.javass.spring.chapter3.HelloImpl3">

<constructor-arg name="message" value="Hello World!"/>

<constructor-arg name="index" value="3"/>

</bean>

2. Setter註入

通過在通過構造器,靜態工廠,實例工廠實例好bean後,通過調用bean類的setter方法進行註入依賴。

只有一種方式,根據名字註入。

//setter方法

public void setMessage(String message) {

this.message = message;

}

public void setIndex(int index) {

this.index = index;

}

<bean id="bean" class="cn.javass.spring.chapter3.HelloImpl4">

<property name="message" value="Hello World!"/>

<property name="index"><value>1</value></property>

</bean>

Spring IoC容器註入集合、數組、字典

Spring不僅能註入簡單類型數據,還能註入集合(CollectionSetList)類型、數組(Array)類型、字典(Map)類型數據、Properties類型數據。

自動裝配

自動裝配就是指由Spring來自動地註入依賴對象,無需人工參與。

自動裝配的好處是減少構造器註入和setter註入配置,減少配置文件的長度。自動裝配通過配置<bean>標簽的 “autowire”屬性來改變自動裝配方式。

Eg.<bean id="bean" class="cn.javass.spring.chapter3.bean.HelloApiDecorator"

autowire="byName"/>

四種可選值:no”、“byName ”、“byType”、“constructor

如果一個bean有很多setter註入,通過“byName”方式能減少很多<property>配置。


Spring IOC總結