1. 程式人生 > >《Spring官方文件》IoC容器(1-2)

《Spring官方文件》IoC容器(1-2)

原文連結  譯者:kl2422

3.1 Spring IoC容器和beans的介紹

本章涵蓋了Spring框架實現控制反轉(IoC)[1]的原理。IoC又叫依賴注入(DI)。它描述了物件的定義和依賴的一個過程,也就是說,依賴的物件通過構造引數、工廠方法引數或者屬性注入,當物件例項化後依賴的物件才被建立,當建立bean後容器注入這些依賴物件。這個過程基本上是反向的,因此命名為控制反轉(IoC),它通過直接使用構造類來控制例項化,或者定義它們之間的依賴關係,或者類似於服務定位模式的一種機制。

org.springframework.beansorg.springframework.context

是Spring框架中IoC容器的基礎,BeanFactory介面提供一種高階的配置機制能夠管理任何型別的物件。ApplicationContextBeanFactory的子介面。它能更容易整合Spring的AOP功能、訊息資源處理(比如在國際化中使用)、事件釋出和特定的上下文應用層比如在網站應用中的WebApplicationContext。

總之,BeanFactory提供了配置框架和基本方法,ApplicationContext新增更多的企業特定的功能。ApplicationContextBeanFactory的一個子介面,在本章它被專門用於Spring的IoC容器描述。更多關於使用BeanFactory

替代ApplicationContext的資訊請參考章節 3.16, “The BeanFactory”

在Spring中,由Spring IoC容器管理的物件叫做beans。 bean就是由Spring IoC容器例項化、組裝和以其他方式管理的物件。此外bean只是你應用中許多物件中的一個。Beans以及他們之間的依賴關係是通過容器配置元資料反映出來。

3.2容器概述

org.springframework.context.ApplicationContext介面代表了Spring Ioc容器,它負責例項化、配置、組裝之前的beans。容器通過讀取配置元資料獲取物件的例項化、配置和組裝的描述資訊。它配置的0元資料用xml、Java註解或Java程式碼表示。它允許你表示組成你應用的物件以及這些物件之間豐富的內部依賴關係。

Spring提供幾個開箱即用的ApplicationContext介面的實現類。在獨立應用程式中通常建立一個ClassPathXmlApplicationContextFileSystemXmlApplicationContext例項物件。雖然XML是用於定義配置元資料的傳統格式,你也可以指示容器使用Java註解或程式碼作為元資料格式,但要通過提供少量XML配置來宣告啟用對這些附加元資料格式的支援。

在大多數應用場景中,顯示使用者程式碼不需要例項化一個或多個Spring IoC容器的例項。比如在web應用場景中,在web.xml中簡單的8行(或多點)樣板式的xml配置檔案就可以搞定(參見第3.15.4節“Web應用程式的便利的ApplicationContext例項化”)。如果你正在使用Eclipse開發環境中的Spring Tool Suite外掛,你只需要滑鼠點點或者鍵盤敲敲就能輕鬆搞定這幾行配置。

下圖是Spring如何工作的高階展示。你應用中所有的類都由元資料組裝到一起
所以當ApplicationContext建立和例項化後,你就有了一個完全可配置和可執行的系統或應用。

Figure 5.1. Spring IoC容器

3.2.1 配置元資料

如上圖所示,Spring IoC容器使用了一種配置元資料的形式。此配置元資料表示應用程式的開發人員告訴Spring容器怎樣去例項化、配置和裝備你應用中的物件。

配置元資料傳統上以簡單直觀的XML格式提供,本章大部分都使用這種格式來表達Spring IoC容器核心概念和特性。

[Note] 提示
基於XML的元資料不是允許配置元資料的唯一形式,Spring IoC容器與實際寫入配置元資料的格式是分離的。這些天許多的開發者在他們的Spring應用中選擇基於Java配置

更多關於Spring容器使用其他形式的元資料資訊,請檢視:

  • 基於註解配置:在Spring2.5中有過介紹支援基於註解的配置元資料
  • 基於Java配置:從Spring3.0開始,由Spring JavaConfig提供的許多功能已經成為Spring框架中的核心部分。這樣你可以使用Java程式而不是XML檔案定義外部應用程式中的bean類。使用這些新功能,可以檢視 @Configuration, @Bean, @Import@DependsOn 這些註解

Spring配置由必須容器管理的一個或通常多個定義好的bean組成。基於XML配置的元資料中,這些bean通過標籤定義在頂級標籤內部。在Java配置中通常在使用@Configuration註解的類中使用@Bean註解方法。

這些bean的定義所對應的實際物件就組成了你的應用。通常你會定義服務層物件,資料訪問層物件(DAO),展現層物件比如Struts的Action例項,底層物件比如Hibernate的SessionFactories,JMS Queues等等。通常在容器中不定義細粒度的域物件,因為一般是由DAO層或者業務邏輯處理層負責建立和載入這些域物件。但是,你可以使用Spring整合Aspectj來配置IoC容器管理之外所建立的物件。詳情請檢視Spring使用AspectJ依賴注入域物件

接下來這個例子展示了基於XML配置元資料的基本結構

<code>

<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="..." class="...">
<!-- 在這裡寫 bean 的配置和相關引用 -->
</bean>

<bean id="..." class="...">
<!-- 在這裡寫 bean 的配置和相關引用 -->
</bean>

<!-- 在這裡配置更多的bean -->

</beans>
</code>

<code>id</code>屬性用來使用標識每個獨立的bean定義的字串。class屬性定義了bean的型別,這個型別必須使用全路徑類名(必須是包路徑+類名)。id屬性值可以被依賴物件引用。該例中沒有體現XML引用其他依賴物件。更多請檢視bean的依賴