Spring學習(十六)Spring Bean內容模型介紹
阿新 • • 發佈:2019-02-01
本次主要介紹Spring Bean的內容模型,通過對內容模型的瞭解使開發者能夠對Spring Bean有一個全域性的認識。關於Spring Bean的詳細資訊可以參考spring-beans.xsd這個檔案。在這裡,我們只介紹一些常用的元素。
beans是spring-beans.xsd的根節點,下圖給出了beans的內容模型:
先介紹下beans節點中的屬性 1.default-lazy-init 在內容模型中定義為: ,預設值為false。
開發者可以在bean定義級別通過lazy-init屬性值來覆蓋beans中定義的default-lazy-init屬性值。
2.default-dependency-check
在內容模型中的定義為:
。
"objects”表示需要對Java Bean之間的依賴關係來進行判斷。
"all”表示上述兩個方面都需要判斷。
開發者可以在bean定義級別通過dependency-check來覆蓋beans中定義的default-dependency-check屬性值。
3.default-autowire
在內容模型中的定義為:
即開發者不用顯式的在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的子元素:
可以看到他包含兩個屬性index和type, 其中: 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的內容模型圖:
先介紹下beans節點中的屬性 1.default-lazy-init 在內容模型中定義為:
<!ATTLIST beans default-lazy-init (true|false)”false”>
全域性設定,
作用為:確定Spring定義Java Bean是否需要延遲載入<!ATTLIST beans default-dependency-check (none|objects|simple|all) “none”>
全域性設定,
作用為:確定Spring是否需要對Java Bean以及Java Bean之間的依賴關係進行判斷,預設值為none,即不進行依賴關係的判斷。
"simple”表示需要對Java Bean中使用的java原型String來進行判讀<!ATTLIST beans default-autowire (none|byName|byType|constructor|autodetect) “no”>
作用為:是否藉助與Spring提供的autowire功能,以注入Java Bean之間的引用關係。- description:可選元素,描其所在Spring配置檔案的內容描述。
- import:可選元素,用於匯入其他Spring的配置檔案。
- bean:用於定義Java 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>
<bean name="HelloWorld" class="cn.lovepi.chapter03.instance.HelloWorld">
<constructor-arg>
<ref bean="HelloChina"/>
</constructor-arg>
</bean>
那麼,如果存在多個構造器引數的時候,則開發者能夠通過index或者type來指定構造器引數。
其中:
inex用於指定具體引數在構建器列表當中的位置。
type用於指定具體引數的型別。
那麼接下來看一看constructor-args的內容模型:可以看到他包含兩個屬性index和type, 其中: 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的內容模型圖: