1. 程式人生 > >Spring學習(十二)Spring 的配置檔案概述

Spring學習(十二)Spring 的配置檔案概述

我們應該怎麼理解和認識Spring的配置檔案呢?         其實,Spring的配置檔案是Spring容器對Bean進行生產以及關係注入的圖紙,他是Spring的基礎。如果我們沒有配置檔案的話,則Spring的容器將無從談起。         Spring 的配置檔案是用於指導 Spring 工廠進行 Bean 的生產、依賴關係注入及 Bean 例項分發的“圖紙”, J2EE 程式設計師必須學會並靈活應用這份“圖紙”,準確地表達自己的“生產意圖”。它是一個或多個標準的XML文件,其ApplicationContext.xml是Spring的預設配置檔案,當容器啟動時找不到其他的配置檔案時,則會嘗試載入這個預設的配置檔案。
Spring容器成功啟動需要以下三方面的條件同時具備:
  1. Spring的類包必須已經放在Spring的類容器下面
  2. 應用程式應當為Spring提供完備的Bean的配置資訊
  3. Bean的類都已經放在Spring的類容器下面
Spring啟動時讀取應用程式提供的Bean的配置資訊,並在Spring容器中生成一份相應的Bean的配置登錄檔,然後根據這張登錄檔來例項化Bean,裝配好Bean之間的依賴關係,為上層應用提供準備就緒的執行環境。 而bean的配置資訊就是Bean的元資料資訊,他由以下五個方面來組成:
  1. Bean的實現類
  2. Bean的屬性資訊 比如:資料來源的連線數,使用者名稱和密碼等等。
  3. Bean的依賴關係
    Spring根據依賴關係配置完成Bean之間的裝配
  4. Bean的行為配置 比如:生命週期範圍以及生命週期各個過程的回撥函式等
  5. Bean的建立方式定義 主要說明是通過構造器還是工廠方法來構造Bean

接下來是他們之間的相互關係:


有時,一個專案中可能存在多個配置檔案,那麼Spring專案載入多個配置檔案的方法:
  1. 在配置檔案中使用import來匯入所需的配置檔案。
  2. 將多個配置檔案構造為一個數組,然後傳遞給ApplicationContext實現載入多個配置檔案。
這兩種方式都是通過呼叫BeanDefinitionReader來讀取定義檔案的,在內部實現上沒有任何的區別。 在大型的Spring專案當中,所有的bean配置在一個配置檔案當中很不容易管理且也不利於團隊的開發。通常在開發過程當中,我們會按照功能模組和開發人員來將配置檔案分成多個。這樣會有利與模組的劃分。接下來我們需要使用import屬性來引入多個配置檔案到專案當中。 假如我們的專案需要用到多個配置檔案,且配置檔案位於不同的資料夾下,比如: Spring-Common.xml位於common資料夾下 Spring-Connection.xml位於connection資料夾下
Spring-Module.xml位於module資料夾下 傳統載入方式:
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]
    {"Spring-Common.xml","Spring-Connection.xml","Spring-ModuleA.xml"});
但是這種方法不宜組織,且不宜維護。 則我們使用整合配置檔案:Spring-All-Module.xml
<beans .....>
    <import resource="common/Spring-Common.xml"/>
    <import resource="connection/Spring-Connection.xml"/>
    <import resource="module/Spring-Module.xml"/>
</beans>
在檔案當中使用import直接將其他的配置檔案匯入到這個檔案當中就好了。 整合後加載方式:
ApplicationContext context = new ClassPathXmlApplicationContext(“Spring-All-Module.xml”);
可以看到配置檔案是整個Spring專案的靈魂,我們先來看一下Spring配置檔案的一般結構:
<beans>//Bean定義的開始和結束
    <import  resource=“resource1.xml” />//匯入其他配置檔案Bean的定義
    <import  resource=“resource2.xml” />
    <bean id=“bean1” class=“***”></bean>
    <bean name=“bean2” class=“***”></bean>
    <alias alias=“bean3” name=“bean2” />//alias用於定義Bean的別名
</beans>
可以看到一個簡單的Spring配置檔案就是這樣。 其中:
  • Import標籤可以放在Beans標籤下的任何位置,沒有順序關係。
  • bean3和bean2是同一個Bean,bean3是bean2的別名。
        Spring 的配置檔案是基於XML格式的,Spring1.0的配置檔案採用DTD格式,Spring2.0以後使用Schema的格式,後者讓不同型別的配置擁有了自己的名稱空間,使配置檔案更具有擴充套件性。 採取基於Schema的配置格式,檔案頭的宣告會複雜一些,請看一個簡單示例:
<?xml version="1.0" encoding="UTF-8" ?>
<beans
<!--標準名稱空間-->
xmlns="http://www.springframework.org/schema/beans"
<!--xsi標準名稱空間,用於指定自定義名稱空間的Schema檔案-->
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<!—aop表示自定義名稱空間,aop是該名稱空間的簡稱,而後面是名稱空間的全稱。必須在xsi名稱空間為其指定的名稱空間對應的Schema檔案-->
    xmlns:aop="http://www.springframework.org/schema/aop"

<!—下面這四行程式碼,是為每個名稱空間指定具體的schema檔案-->
    xsi:schemaLocation="
           http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/context/spring-aop-3.0.xsd">
<!—預設名稱空間的配置 -->
    <bean id = "app" class="cn.lovepi.App" />
<!—aop名稱空間的配置 -->
    <aop:config>
        <aop:pointcut id="mycut" expression="execution(* cn.love*(..))"/>
    </aop:config>
</beans>
注: Xml Schema:Schema在文件根節點中通過xmlns對文件當中的名稱空間進行命名。 我們在上面的程式碼中定義了三個名稱空間,
  1. 首先我們定義了一個預設名稱空間,他沒有空間名,用於Spring Bean的定義。
  2. 接下來我們命名了一個xsi名稱空間,這個名稱空間用於為每個文件中名稱空間指定相對應的schema的樣式檔案。是標準組織定義的標準名稱空間。
  3. 我們還命名了一個aop的名稱空間,這個名稱空間是Spring配置aop的名稱空間,是使用者自定義的名稱空間。
名稱空間的定義分為了兩個步驟:
  1. 指定名稱空間的名稱,需要指定名稱空間的縮類名和全名
  2. 指定名稱空間的schema文件樣式檔案的位置,用空格或回車行來進行分割。
指定名稱空間schema地址有兩個用途:
  1. xml解析器可以獲取schema檔案,並對文件進行格式合法性驗證
  2. 在開發環境下,IDE可以用schema檔案來對文件編輯器進行誘導功能。
Spring3.0 的配置Schema檔案分佈在各模組類包中,如果模組擁有對應的Schema檔案,則可以在模組類包中找到一個config目錄,Schema檔案就位於該目錄中,如下是對這些Schema檔案的用途進行了簡單說明: 示例說明:Spring-beans-3.0.xsd 名稱空間:http://www.springframework.org/schema/beans Schema 檔案:http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 可以看出在Spring3.0當中,所有的Schema檔案的名稱空間以及對應的位置都和Beans這個Schema檔案是類似的。 那麼接下來來了解以下Spring當中其他Schema檔案的用途:
  • spring-beans-3.0.xsd:Spring3.0最主要的配置檔案,主要是用於配置Bean
  • spring-aop-3.0.xsd:aop配置定義的schema
  • spring-tx-3.0.xsd:宣告式事物配置定義的Schema
  • spring-mvc-3.0.xsd:Spring3.0當中新增的
  • spring-util-3.0.xsd:是為簡化某些複雜的標準配置而提供的Schema
  • spring-jee-3.0.xsd:是為簡化J2EE中EJB等功能的配置而提供的Schema
  • spring-jdbc-3.0.xsd:為Spring內接資料庫而提供的Schema,3.0新增
  • spring-jms-3.0.xsd:jms配置的Schema
  • spring-lang-3.0.xsd:增加了對動態語言的支援,為整合動態語言而定義
  • spring-oxm-3.0.xsd:配置物件xml對映到schema,3.0新增
  • spring-task-3.0.xsd:任務排程的Schema
  • spring-tool-3.0.xsd:為整合Schema一些有用工具而提供的Schema