1. 程式人生 > >Spring配置文件XML詳解

Spring配置文件XML詳解

細節 tor user location 包名 byname size 寫文件 beans

1.bean的基本屬性配置:

<!-- id是bean的標識符,必須唯一,如果沒有配置id,name默認為標識符
      如果配置了id,有配置了name,那麽name為別名
     name可以設置多個別名,分隔符可以是空格 逗號 分號
     class是bean的全限定名,即包名加類名
        如果不配置id和name,那麽可以根據applicationContext.getbean(Class)獲取對象,
   scope:bean的作用域,
      取值:singleton:單例的,整個容器只產生一個對象,默認是單例
         prototype:原型,每次獲取bean都創建一個新對象
         request:每次請求時創建一個新的對象
         session:在一個會話範圍內只產生一個對象
         application:在應用範圍內是一個對象
    autowire:自動裝配 用於簡化spring的配置
      取值:byname:根據名稱(根據set方法中set後面的內容)去查找相應的bean,發現了則裝載上
         bytype:根據類型自動裝配,不用去管id,但同一種類型的bean只能有一個,f否則報錯
         constructor,當通過構造器註入實例化bean時,裝配構造方法
         
         -->
    <bean id="userMysqlDaoImpl" class="com.wang.dao.impl.UserMysqlDaoImpl"></bean>
    <bean id="userOracleDaoImpl" class="com.wang.dao.impl.UserOracleDaoImpl"></bean>
    <bean id="service" class="com.wang.service.UserService">
        <property name="userDao" ref="userOracleDaoImpl"></property>
    </bean>

  

2.團隊協作開發(import標簽):

<!--可以讀取到其他配置的xml,如果在當前目錄下,直接寫文件名,如果是在其他目錄下,要寫完整包名,以"/"分隔-->
<import resource="beans1.xml"/>

  

3.bean的繼承(parent屬性):

如果car1和car2對象同屬於類Car,在配置文件中,他們之間就可以使用parent屬性來簡化代碼:

<bean id="car1" class="com.wang.entity.Car">
        <property name="brand" value="Audi"/>
        <property name="price" value="1000000"/>
  </bean>
  <bean id="car2" parent="car1">
        <property name="price" value="3000"></property>
  </bean>

  

這樣的配置,car2就繼承了car1中的class屬性和brand的屬性.簡化了代碼,car1稱為父bean,car2稱為子bean.car2可以覆蓋從car1繼承過來的屬性,比如price.

4.抽象bean(abstract屬性)

當在bean標簽中設置屬性abstract="true",即指定該bean為抽象bean,不會被實例化,一般僅供被其他的bean繼承.

抽象bean,可以不指定class屬性,而是在繼承它的子Bean中設置class屬性.

5.bean的關聯(depend-on屬性)

要求在配置類A的bean時,必須有一個關聯的類B的bean,換句話說類A的bean依賴於類B的bean,這時可以在類A的bean標簽中設置depend-on="bBean".

這樣設置的話,類B的bean會先初始化,    

6.使用外部屬性文件

在配置文件中配置Bean時,有時候需要在bean的配置裏混入一些系統部署的細節信息(例如文件路徑,數據源配置信息),而這些部署細節實際上需要和bean配置相分離.

在配置c3p0數據源連接池時,我們可以這樣寫:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="root"></property>
        <property name="password" value="123"></property>
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
     <!-- <property name="initPoolSize" value="3"></property>
        <property name="maxPoolSize" value="10"></property>  -->
    </bean>

  

為了使數據庫配置信息和spring的配置文件分離,便於維護,更好的方法是這樣:

在src目錄下,新建一個db.properties文件,,內容如下:

jdbc.user=root
jdbc.password=123
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/hibernate

jdbc.initialPoolSize=5
jdbc.maxPoolSize=10

  

在beans.xml中:

<!-- 導入資源文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 配置c3p0連接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
     <!-- <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>  -->
    </bean>

註意使用context的標簽,需要在頭文件中添加支持context的信息,這裏不再給出.

7.管理bean的生命周期:

SpringIOC容器可以管理bean的生命周期,在Bean生命周期的特定點執行定制的任務.

在bean標簽中有和,為bean指定初始化和銷毀方法.當設置了這兩個屬性後,bean的生命周期是這樣的:

創建bean實例->為bean的屬性設置值,或對其他bean進行引用->調用bean的初始化方法->根據需要調用bean自己的方法(使用bean)->容器關閉時,調用bean的銷毀方法.

參考網址http://www.cnblogs.com/ioufev/p/9950768.html

Spring配置文件XML詳解