1. 程式人生 > >Spring學習6(1)Spring配置概述以及Bean基本配置

Spring學習6(1)Spring配置概述以及Bean基本配置

Spring學習6(1)

 學習5中主要學習的是Ioc的容器的整體概念,這裡(即是書中第5章)主要開始對Bean的配置進行學習。

Spring配置概述

Spring容器高層檢視

 要使應用程式中的Spring容器成功啟動,需要同時具備以下三方面條件:

  1. Spring 框架的類包都已經放到應用程式的類路徑下
  2. 應用程式為spring提供了完備的Bean配置資訊
  3. Bean的類都已經放到應用程式的類路徑下

 具體關係與過程如下圖所示:

在這裡插入圖片描述  Bean配置資訊是Bean的元資料資訊,其由下列四個方面組成:

  1. Bean的實現類
  2. Bean的屬性資訊:如使用者名稱,密碼等
  3. Bean的依賴關係
  4. Bean的行為配置:如生命週期範圍及各個過程的回撥函式

基於XML的配置

 spring2.0後xml使用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為自定義名稱空間名稱的簡稱,後面的url是名稱空間的全稱,指定具體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-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <!-- 預設名稱空間的配置 -->
<bean id="foo" class="com.smart.Foo"/> <!-- aop名稱空間的配置 --> <aop:config> <aop:advisor pointcut="execution(* *..PetStoreFacade.*(..))" advice-ref="texAdvice"/> </aop:config> </beans>

 在上面的程式碼用xmlns的方式對文件所引用的名稱空間進行申明,上述程式碼定義了三個名稱空間:

  1. 預設名稱空間,沒有空間名,用於Spring Bean的定義
  2. xsi標準名稱空間,用於為每個文件中的名稱空間指定相應的Schema樣式檔案。
  3. aop名稱空間,是spring配置Aop的名稱空間,即是一種自定義的名稱空間。

名稱空間的定義

 名稱空間的定義分為兩個步驟:

  1. 指定名稱空間的名稱
  2. 指定名稱空間的schema文件格式檔案的位置,用空格或回車換行進行分隔。

 在第一步中需要指定名稱空間的縮略名和全名,如上述程式碼中定義的: xmlns:aop="http://www.springframework.org/shema/aop"。aop為名稱空間的別名,文件後面的元素可以通過名稱空間名加以區別,如<aop:config>等。  如果名稱空間的別名為空,則是預設名稱空間,如<beans/><bean/>等。

Bean基本配置

 在Spring容器的配置檔案中定義一個簡要的Bean配置片段如下:

<bean id="Bean的名稱" class="Bean的類名"/>

 容器可以直接根據id的名字利用getBean(id)的方法得到所需的Bean。它是在容器中起到定位查詢的作用,在外部程式中是和spring Ioc容器進行互動的橋樑。

 一般情況下,我們需要為一個Bean指定一個id屬性作為Bean的名稱,id在IoC容器中必須是唯一的,而且id的命名需要滿足XML對id的命名規範,必須以字母開始,以完整結束符號結束。  在實際情況下,使用者可以使用name的屬性來提供BeanName,一個bean可以有多個id,多個name,可以用逗號,分號或者空格進行分隔,如: <bean name="#car1, 123, $car"...> 但是在獲取Bean的時候如果有兩個相同neam時,會採用後定義的bean。  如果id和name兩個屬性都沒有指定,那麼會將Bean的類名作為id,多個實現類相同的匿名bean如下所示時:

<bean class="class.smart.simple.Car"/>
<bean class="class.smart.simple.Car"/>
<bean class="class.smart.simple.Car"/>

其id就分別設為:

com.smart.simple.Car
com.smart.simple.Car#1
com.smart.simple.Car#2

後續若還有更多匿名類則以此類推。