- 集合屬性
在Spring中可以通過一組內置的XML標籤來配置集合屬性,例如:<list>,<set>或<map>
數組和list
配置java.util.List類型的屬性,需要指定<list>標籤,在標籤裏包含一些元素。這些標籤 可以通過<value>指定簡單的常量值,通過<ref>指定對其他Bean的引用。通過<bean> 指定內置bean定義。通過<null/>指定空元素。甚至可以內嵌其他集合。
<!--list集合--> <bean id="testlist" class="DI.Person"> <property name="id" value="103"></property> <property name="car" > <list> <ref bean="Car"/> <ref bean="DITest"/> </list> </property> <property name="name" value="李四"></property> </bean> <!--Map集合--> <bean id="testMap" class="DI.PersonMap"> <property name="name" value="劉先生"/> <property name="cars"> <map> <entry key="AA" value-ref="Car"/> <entry key="BB" value-ref="DITest"/> </map> </property> </bean> <!--集合bean--> <bean id="testlist" class="DI.Person"> <property name="id" value="103"></property> <property name="car" ref="listbean"> </property> <property name="name" value="李四"></property> </bean> <util:list id="listbean"> <ref bean="DITest"/> <ref bean="Car"/> </util:list>
FactoryBean
Spring中有倆種類型的Bean,一種是普通的Bean,另外一種是FactoryBean
FactoryBean與Bean的區別:其返回的對象不是指定類的一個實例,其返回的是該工 廠bean的getObject方法所返回的對象
public class CarFactoryBean implements FactoryBean<Car> { /** * 工廠Bean具體創建的Bean對象是由GetObject方法來返回的 * @return * @throws Exception */ @Override public Car getObject() throws Exception { return new Car("五菱宏光","五菱", (double) 80000); } /** * 返回一個bean對象的類型 * @return */ @Override public Class<?> getObjectType() { return Car.class; } /** * bean可以是單例的,也可以是原型的 * @return */ @Override public boolean isSingleton() { return false; } <!--Spring_Factory.xml的配置--> <!--FactoryBean具體的返回對象是由getObject來確定的--> <bean id="factoryBean" class="factoryBean.CarFactoryBean"/> //測試案例 public static void main(String[] args) { //psvm ApplicationContext applicationContext=new ClassPathXmlApplicationContext("Spring_Factory.xml"); Car cars=applicationContext.getBean("factoryBean",Car.class); System.out.println(cars.toString());//sout }
Bean的高級配置
繼承
<!--bean的繼承關係
abstract="true":抽象Bean,不能被創建對象,class可以省略不配置
若父Bean沒有class,則子類必須腰帶class
繼承可以從父類中繼承一些配置,但是id,abstract,autowire不會被繼承
子bean從父bean中繼承配置,包括bean的屬性配置
子bean也可以覆蓋從父bean繼承過來的配置
也可以忽略父bean的class屬性,讓子bean指定自己的類,而共享相同的屬性配置。但此時abstract必須設爲true。
-->
<bean id="address1" abstract="true">
<property name="city" value="鄭州"/>
<property name="street" value="嵩山路"/>
</bean>
<bean id="address2" class="relation.Address" parent="address1">
<property name="street" value="科學大道"/>
</bean>
依賴
<!--Bean的依賴關係-->
<bean id="address3" class="relation.Address" parent="address1"
depends-on="address4">
<property name="street" value="京廣路"/>
</bean>
<bean id="address4" class="relation.Address"/>