spring bean定義
id和name
id有命名限制,比如必須以字母開頭,在配置文件中id必須唯一
name沒有命名限制,在配置文件中可以有多個name一樣的bean,getBean時返回最後定義的那個bean
如果二者都沒定義,例 <bean class="abc.a">, 默認以全限定類名作為bean名,getBean("abc.a");
如果二者都沒定義,並有多個<bean class="abc.a">,則第一個bean用getBean("abc.a")獲取,第二個用getBean("abc.a#1")獲取,以此類推。
屬性註入
命名規則,要麽前兩個字母都大寫,要麽全部小寫
值為字面量時註意5個特殊字符&<>"',如果值中包含特殊字符,有兩種解決辦法,一種是<![CDATA[ ]]>,另一種是特殊字符替換,比如<替換為<
值為引用時可用<ref>元素,包含三個屬性:bean(引用同一個容器或父容器的Bean)、local(只引用同一個配置文件的Bean)、parent(引用父容器的Bean)
如果不用引用,也可以用內部Bean的配置方式,即Bean的定義在Property元素內,這個Bean只能為對應的外部Bean所用,不能用於其他Bean的引用
null值,如果屬性值想為null值,不能像這樣<property name="abc"><value></value></property>,這樣代表值為空字符串,應該為這樣<property name="abc"><value><null/></value></property>
properties與map類似,只是properties的鍵值只能是字符串
構造函數註入
配置項中最好加索引和類型,比如:<constructor-arg index="0" type
父子bean(集合合並)
子bean可繼承父bean的屬性,父bean一般會設置abstract="true"(表示不需要實例化),子類中要寫 parent="xxx" ,如果屬性同名,子bean會覆蓋父bean屬性,如果想屬性合並,比如父類有一個屬性是set類型,子類也有一個屬性是set類型,如果想屬性合並,需要在對應屬性中寫merge="true"
簡化配置
當然還可以更簡潔,即引用p命名空間,格式p:屬性名="xxx" ,p:屬性名_ref="xxx".
spring bean定義