xml通過構造器注入初始化bean && c命名空間

 

<bean id="compactDisc"  class="soundsystem.CompactDisc"  /> //聲明一個簡單的bean

CDPlay通過ID爲compactDisc 的bean將其引入(構造器引入bean)

<bean id="cdPlayer"  class="soundsystem.CDPlay" >

   <constructor-arg  ref="compactDisc">

</bean>

也可以使用Spring的c-命名空間,c-命名空間是Spring3.0中引入的。他是在XML中更爲了簡潔地描述構造參數的方式。要使用它必須在XML的頂部聲明

Spring爲<constructor-arg>元素提供了c命名空間作爲替代方案,用來簡化配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

...

</beans>

<bean   id = "cdPlayer"  calss = "soundsystem.CDPlay"  c:cd-ref = "compactDisc">

c命名空間的使用模板:   c:構造器參數名-ref="要注入的bean的Id"

值得注意的是,直接把構造參數名稱加上c命名空間的前綴作爲bean的一個屬性定義,來替代對應的constructor-arg只對以debug方式編譯的class有效,因爲debug編譯時,要將值保存在類代碼中(即我們調試要看到的調試值),對於非debug方式編譯的class文件Spring將無法獲取到對應構造方法的參數名,這種情況可能無法正常執行。對於這種情況我們可以直接使用構造方法參數的索引加上下劃線“_”前綴來代替對應的參數名,索引是從0開始的,如上面的示例以索引來代替時將是如下這個樣子。

<bean   id = "cdPlayer"  calss = "soundsystem.CDPlay"  c:_0-ref = "compactDisc">

如果只有一個構造參數,那麼就不需要用標識索引,則:

<bean   id = "cdPlayer"  calss = "soundsystem.CDPlay"  c:_-ref = "compactDisc">

 

將字面量值直接注入到構造器中

<bean   id = "cdPlayer"  calss = "soundsystem.CDPlay">

      <constructor-arg  value="This is a param value">

</bean>

 

使用命名空間如下:

<bean   id = "cdPlayer"  calss = "soundsystem.CDPlay"

        c:_title = "This is a param value"

        c:_artist = " this a one param value" />

可以看到,裝配字面量與裝配引用分別在屬性名去掉了"-ref"後綴,與之類似,可通過索引進行裝配

<bean   id = "cdPlayer"  calss = "soundsystem.CDPlay"

        c:_0 = "This is a param value"

        c:_1 = " this a one param value" />

如果一個參數:

<bean   id = "cdPlayer"  calss = "soundsystem.CDPlay"

        c:_ = "This is a param value"    />

 

使用<constructor-arg>和c命名空間實現構造器注入時,還是有一些細微的差別,在裝配集合方面,<constructor-arg>更有優勢,目前使用c命名空間的屬性無法實現裝配集合的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章