Spring學習(十六)Spring Bean內容模型介紹

       本次主要介紹Spring Bean的內容模型,通過對內容模型的瞭解使開發者能夠對Spring Bean有一個全局的認識。關於Spring Bean的詳細信息可以參考spring-beans.xsd這個文件。在這裏,我們只介紹一些常用的元素。
beans是spring-beans.xsd的根節點,下圖給出了beans的內容模型:

先介紹下beans節點中的屬性

1.default-lazy-init
在內容模型中定義爲:
<!ATTLIST beans default-lazy-init (true|false)”false”>
全局設定,
作用爲:確定Spring定義Java Bean是否需要延遲加載,默認值爲false
開發者可以在bean定義級別通過lazy-init屬性值來覆蓋beans中定義的default-lazy-init屬性值。

2.default-dependency-check
在內容模型中的定義爲:
<!ATTLIST beans default-dependency-check (none|objects|simple|all) “none”>
全局設定,
作用爲:確定Spring是否需要對Java Bean以及Java Bean之間的依賴關係進行判斷,默認值爲none,即不進行依賴關係的判斷。
"simple”表示需要對Java Bean中使用的java原型String來進行判讀
"objects”表示需要對Java Bean之間的依賴關係來進行判斷
"all”表示上述兩個方面都需要判斷。
開發者可以在bean定義級別通過dependency-check來覆蓋beans中定義的default-dependency-check屬性值。

3.default-autowire
在內容模型中的定義爲:
<!ATTLIST beans default-autowire (none|byName|byType|constructor|autodetect) “no”>
作用爲:是否藉助與Spring提供的autowire功能,以注入Java Bean之間的引用關係。
即開發者不用顯式的在Spring配置文件中給出Java Bean對其他Java Bean的引用。
不建議使用,其默認值也是no
"byName":根據java bean 的屬性名來進行autowire的操作。
"byType":根據java bean的屬性類型來進行autowire的操作。前提是在Spring BeanFactory當中僅存在單個類型的java bean定義
"constructor":在Spring BeanFactory當中僅存在一個的constructor定義。
"autodetect":藉助constructor或者byType來進行autowire的操作的。

接下來介紹一下beans的子元素:

  • description:可選元素,描其所在Spring配置文件的內容描述。
  • import:可選元素,用於導入其他Spring的配置文件。
  • bean用於定義Java Bean。



接下來我們對bean元素的屬性以及其子元素的所有信息來進行詳細的介紹:
bean元素:bean元素是Beans元素的子節點,通常用於定義Java Bean。開發者可以藉助Java Bean的屬性或者構建器參數來定義Java Bean

先來認識下bean元素的相關屬性:

  • Id:通過id來訪問SpringBeanFactory中的java bean
  • name: 通過name來訪問SpringBeanFactory中的java bean,在某種意義上來講name就是id的別稱。
  • class:java bean定義的全限定名,即包名+類名。假如配置文件中沒有指定id或name的取值,那麼class即作爲id的取值。
  • parent:如果沒有指定class屬性的話則可以使用parent,他們的含義是等效的。而且parent java bean 定義不僅能夠繼承parent當中定義的所有內容,而且還能夠覆蓋parent當中定義的相關內容。比如覆蓋java bean方法:init、destory等內容。當然某些parent設置是不能被覆蓋的,比如:依賴關係、autowire的值、作用域。
  • abstract:當值爲true的時候,表明相應的java bean定義只是供parent使用,其本身是不能夠被實例化的。默認值爲false。
  • scope:bean的作用域,Spring當中提供了5種作用域。
  • lazy-init:延遲加載屬性,只有當用到這個bean的時候,Spring纔會進行實例化。
  • autowire:開發者是否使用Spring提供的autowire功能,建議不使用,默認值爲no
  • dependency-check:Spring是否需要對java bean 以及java bean之間的依賴關係來進行判斷。定義此屬性將會覆蓋在beans中定義的default-dependency-check屬性。
  • depends-on:用於保證相應的java bean在其指定depends-on的java bean實例化之後,纔去實例化使用了depends-on的java bean的本身。
  • init-method:主要用於設置在實例化java bean,並設置java bean的屬性之後,待執行的初始化方法。
  • destroy-method:當中SpringBeanFactory銷燬的時候,可以利用此方法來進行一些資源回收的操作。或者一些其他的操作,比如關閉同GMS目的地的監聽以及連接。在這裏請注意,指令的方法應該是參數類型。
  • factory-method:指定用於創建java bean 工廠的methed方法。在Spring當中,對象的創建最好是通過bean factory來創建。
  • factory-bean:指定用於創建java bean實例的工廠類。

接下來介紹bean的子元素:

1.constructor-arg
當我們爲了構建java bean實例的時候,開發者可能需要對java bean來指定構造器的參數
這與autowire中的constructor是一樣的。當java bean僅存在單個構造器的時候,則可以直接使用。



如下:
在這裏我們定義了一個名稱爲HelloWorld的java bean,他僅存在着一個構造器,而且構造器中只有一個參數,在這裏我們引用的是HelliChina這個bean。
</bean>
<bean name="HelloWorld" class="cn.lovepi.chapter03.instance.HelloWorld">
    <constructor-arg>
        <ref bean="HelloChina"/>
    </constructor-arg>
</bean>
那麼,如果存在多個構造器參數的時候,則開發者能夠通過index或者type來指定構造器參數。
其中:
inex用於指定具體參數在構建器列表當中的位置。
type用於指定具體參數的類型。
那麼接下來看一看constructor-args的內容模型:

可以看到他包含兩個屬性indextype
其中:
inex用於指定具體參數在構建器列表當中的位置。
type用於指定具體參數的類型。

而在右邊是他包含的一些子元素,
可以看到其中還有list、set、map、props這些存儲對象的容器。類似與java Collection中定義的。
那麼接下來詳細的看一看這四個元素的基本內容模型:   
List內容元素模型如下:

可以看到,他同樣包含了一些子元素。
接下來,看下set元素的基本內容結構

最後,我們看到的是map元素:

2.Property
爲了構建java bean實例,開發者可能需要爲java bean指定屬性,即藉助其暴露的setter方法,下圖是property其節點的內容模型:

3.lookup-method
接下來給出lookup-method的內容模型圖:

4.Replace-method
Replace-method的內容模型圖:


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