天天看點

Spring IoC容器(一)

前言:

本章涵蓋了反向控制(IoC)原理的Spring架構實作。IoC也稱為依賴注入(DI)。

一、簡介Spring IoC容器和bean:

IoC我們常說是控制反轉,IoC也稱為依賴注入(DI)。它是一個過程,對象定義它們的依賴關系,也就是他們工作的其他對象

,隻有通過構造函數參數,工廠方法的參數,或者在從工廠方法構造或傳回後在對象執行個體上設定的屬性。然後,容器 在建立bean時

注入這些依賴項。這個過程基本上是反向的,是以命名控制反轉(IoC),它通過使用直接構造類來控制其依賴關系的執行個體化或位置

,在

org.springframework.beans

org.springframework.context

包是Spring架構的IoC容器的基礎。該 

BeanFactory

 接

口提供了能夠管理任何類型的對象的進階配置機制。 

ApplicationContext

 是一個子界面

BeanFactory

。它更容易與Spring的

AOP功能內建; 消息資源處理(用于國際化),事件釋出; 以及應用層特定的上下文,例如

WebApplicationContext

 用于Web應用

程式。簡而言之,它

BeanFactory

提供了配置架構和基本功能,并

ApplicationContext

增加了更多的企業特定功能。這

ApplicationContext

是一個完整的超集

BeanFactory

,并且在本章中專門用于Spring的IoC容器的描述。有關使用

BeanFactory

而不是

ApplicationContext,

參考 官網第7.16節“BeanFactory”的更多資訊。

在Spring中,構成應用程式主幹并由Spring IoC 容器管理的對象稱為bean。bean是由Spring IoC容器執行個體化,組裝和以其他方

式管理的對象。否則,bean隻是應用程式中的許多對象之一。Bean和 它們之間的依賴關系反映在容器使用的配置中繼資料中。

容器概述:

該接口

org.springframework.context.ApplicationContext

代表Spring IoC容器,并負責執行個體化,配置群組裝上述bean

。容器通過讀取配置中繼資料擷取有關執行個體化,配置群組合的對象的說明。配置中繼資料用XML,Java注釋或Java代碼表示。它允許您

表達組成應用程式的對象以及這些對象之間豐富的互相依賴關系。

ApplicationContext

接口的幾個實作方式與Spring一起提供。在獨立應用程式中,建立一個

ClassPathXmlApplicationContext

 或多個執行個體是常見的

FileSystemXmlApplicationContext

。雖然XML是用于定義配置

中繼資料的傳統格式,但您可以通過提供少量XML配置來聲明性地啟用對這些附加中繼資料格式的支援,來訓示容器将Java注釋或代

碼用作中繼資料格式。

在大多數應用場景中,顯式使用者代碼不需要執行個體化一個或多個Spring IoC容器的執行個體。例如,在Web應用程式場景中,應用程式文

件中簡單的八(或更多)樣闆Web描述符XML行

web.xml

通常就足夠了

(參見官網第7.15.4節“Web應用程式的友善的ApplicationContext執行個體化”)。如果您正在使用 Spring Tool Suite Eclipse驅動的開發

環境,則可以通過滑鼠點選或擊鍵輕松建立該樣闆設定。

下圖是Spring如何工作的進階視圖。您的應用程式類與配置中繼資料相結合,以便在

ApplicationContext

建立和初始化後,您将具

有完全配置和可執行的系統或應用程式。

如圖:Spring IoC容器

Spring IoC容器(一)

二、配置中繼資料

如上圖所示,Spring IoC容器消耗一種配置中繼資料的形式 ; 此配置中繼資料表示應用程式開發人員如何告訴Spring容器來執行個體化,配置群組合應用程式中的對象。

配置中繼資料傳統上以簡單直覺的XML格式提供,這是本章大部分用于傳達Spring IoC容器的關鍵概念和功能。

基于XML的中繼資料 不是 唯一允許的配置中繼資料形式。Spring IoC容器本身與實際寫入此配置中繼資料的格式 完全 分離。這些天,很多開發人員為他們的Spring應用程式選擇  基于Java的配置 。

有關使用Spring容器的其他形式的中繼資料的資訊,請參閱:

  • 基于注釋的配置:Spring 2.5引入了支援基于注釋的配置中繼資料。
  • 基于Java的配置:從Spring 3.0開始,Spring JavaConfig項目提供的許多功能成為核心Spring Framework的一部分。是以,您可以使用Java而不是XML檔案來定義應用程式類外部的bean。要使用這些新功能,請參閱

    @Configuration

    @Bean

    @Import

     和

    @DependsOn

    注釋。

pring配置由容器必須管理的至少一個和通常多個bean定義組成。基于XML的配置中繼資料将這些Bean配置為

<bean/>elements inside a top-level

<beans/>

元素中的元素。Java配置通常

@Bean

@Configuration

類中使用注釋方法。

這些bean定義對應于構成應用程式的實際對象。通常,您定義服務層對象,資料通路對象(DAO),呈現對象(如Struts 

Action

執行個體),基礎架構對象(如Hibernate

SessionFactories

,JMS 

Queues

等)。通常,在容器中不配置細粒度的域對象,因為通常由DAO和業務邏輯負責建立和加載域對象。但是,您可以使用Spring與AspectJ的內建來配置在IoC容器的控制之外建立的對象。請參閱使用AspectJ對Spring進行依賴注入域對象。

以下示例顯示了基于XML的配置中繼資料的基本結構:

<?xml version =“1.0”encoding =“UTF-8”?> 
<beans  xmlns = “http://www.springframework.org/schema/beans” 
    xmlns:xsi = “http://www.w3.org / 2001 / XMLSchema-instance“ 
    xsi:schemaLocation = ”http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd“ > 

    <bean  id = “......”  級 = “...” > 
        <! -合作者和配置這個bean去這裡- > 
    </bean> 

    <bean  ID = “...”  級 = “...“ > 
        <! - 這個bean的協作者和配置去這裡 - > 
    </ bean> 

    <! - 更多的bean定義到這裡 - > 

</ beans>      

id

屬性是用于辨別單個bean定義的字元串。該

class

屬性定義bean的類型,并使用完全限定的類名。id屬性的值是指協作對象。用于引用協作對象的XML在此示例中未顯示; 有關詳細資訊,請參閱 依賴關系。

繼續閱讀