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



發佈了68 篇原創文章 · 獲贊 132 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章