02-spring學習-屬性配置細節
配置bean的一些細節
字面值
如果包含特殊符號,直接寫會報錯。可以用這個<![CDATA[]]>包裹起來。
比如這裏的配置屬性裏面的value值包含<>等特殊符號,直接寫會報錯。可以用這個<![CDATA[]]>包裹起來。
<bean id="car2" class="com.spring.beans.Car" > <constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg> <constructor-arg index="1" type="java.lang.String"> <value><![CDATA[<shanghai^>]]></value> </constructor-arg> <constructor-arg type="double"> <value>250</value> </constructor-arg> </bean>
引用其他bean
可以使用<ref>元素或者property的ref屬性,建立bean之間的引用關系
比如這裏有個person類,裏面有個屬性是Car類。在配置bean的時候,需要給car屬性賦值,這時候可以使用ref屬性。
person類:
package com.spring.beans; public class Person { private String name; private int age; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { returnage; } public void setAge(int age) { this.age = age; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + car + "]"; } }
配置:可以使用property的ref屬性,建立bean之間的引用關系
<!-- 如果包含特殊符號,直接寫會報錯。可以用這個<![CDATA[]]>包裹起來 --> <bean id="car2" class="com.spring.beans.Car" > <constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg> <constructor-arg index="1" type="java.lang.String"> <value><![CDATA[<shanghai^>]]></value> </constructor-arg> <constructor-arg type="double"> <value>250</value> </constructor-arg> </bean> <bean id="person" class="com.spring.beans.Person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <!-- 可以使用property的ref屬性,建立bean之間的引用關系 --> <property name="car" ref="car2"></property> </bean>
或者使用<ref>元素配置:
<bean id="person" class="com.spring.beans.Person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <!-- 可以使用property的ref屬性,建立bean之間的引用關系 --> <!-- <property name="car" ref="car2"></property> --> <property name="car"> <ref bean="car2"></ref> </property> </bean>
使用這個person類。
Car car=(Car) ctx.getBean("car"); Car car2=(Car) ctx.getBean("car2"); System.out.println(car); System.out.println(car2); Person person=(Person) ctx.getBean("person"); System.out.println(person);
運行結果:
也可以在屬性或者構造器中包含Bean的聲明,這樣的bean稱為內部bean。
<bean id="person" class="com.spring.beans.Person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <property name="car"> <bean class="com.spring.beans.Car"> <constructor-arg value="Ford"></constructor-arg> <constructor-arg value="changan"></constructor-arg> <constructor-arg value="200" type="double"></constructor-arg> </bean> </property> </bean>
比如註入null值:
為級聯屬性賦值:
集合屬性
使用list節點為list類型的屬性賦值
這裏拿<list>來做例子:
例如:
package com.spring.beans.collections; import java.util.List; import com.spring.beans.Car; public class Person { private String name; private int age; private List<Car> cars; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<Car> getCars() { return cars; } public void setCars(List<Car> cars) { this.cars = cars; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + cars + "]"; } }
配置:
<!-- 測試集合屬性 --> <bean id="person3" class="com.spring.beans.collections.Person"> <property name="name" value="mike"></property> <property name="age" value="27"></property>
<!-- 使用list節點為list類型的屬性賦值 --> <property name="cars"> <list> <ref bean="car"></ref> <ref bean="car2"></ref> </list> </property> </bean>
運行:
set集合的使用跟list集合差不多類似;
Map集合的使用如下:
新建一個newPerson類:
package com.spring.beans.collections; import java.util.Map; import com.spring.beans.Car; public class NewPerson { private String name; private int age; private Map<String,Car> cars; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Map<String,Car> getCars() { return cars; } public void setCars(Map<String,Car> cars) { this.cars = cars; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + cars + "]"; } }
配置:
<!-- 測試Map集合屬性 --> <bean id="person3" class="com.spring.beans.collections.NewPerson"> <property name="name" value="rose"></property> <property name="age" value="28"></property> <property name="cars"> <map> <entry key="AA" value-ref="car"></entry> <entry key="BB" value-ref="car2"></entry> </map> </property> </bean>
配置properties屬性值
使用props 和 prop 為屬性 properties 賦值
package com.spring.beans.collections; import java.util.Properties; public class DataSource { private Properties properties; public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } @Override public String toString() { return "DataSource [properties=" + properties + "]"; } }
配置:
<!-- 配置properties屬性值 --> <bean id="dataSource" class="com.spring.beans.collections.DataSource"> <!-- 使用props 和 prop 為屬性 properties 賦值 --> <property name="properties"> <props> <prop key="user">root</prop> <prop key="password">911581</prop> <prop key="jdbcurl">jdbc:mysql:///sys</prop> <prop key="driverClass">com.mysql.jdbc.Driver</prop> </props> </property> </bean>
運行結果:
配置單例的集合bean
配置單例的集合bean,以供多個bean使用,需要導入util命名空間。
為了導入util命名空間,需要到這裏勾選上util。
然後配置如下:
以list集合的集合bean為例:
<!-- 配置單例的集合bean,以供多個bean進行引用,需要導入util命名空間 --> <util:list id="cars5"> <ref bean="car1"></ref> <ref bean="car2"></ref> </util:list>
對於其他類型的集合,直接把list換成對應的集合類型名就行,然後util裏面的內容按照上面的集合配置即可。
使用直接用ref即可:
<bean id="person4" class="com.spring.beans.collections.NewPerson">
<property name="name" value="rose"></property>
<property name="age" value="28"></property>
<property name="cars" ref="car5"></property>
</bean>
通過p命名空間為bean屬性賦值
通過p命名空間為bean的屬性賦值 ,需要先導入p命名空間,相對於傳統的配置方式更簡潔。
首先導入p命名空間
配置bean:
<!-- 通過p命名空間為bean的屬性賦值 ,需要先導入p命名空間--> <bean id="person5" class="com.spring.beans.collections.Person"
p:age="30" p:name="張三豐" p:cars-ref="cars" ></bean>
註意:
1,為普通屬性賦值的寫法:p:屬性名=“值”;
2,賦值的屬性需要通過引用其他bean的,比如上面的p:cars-ref,這種引用其他bean的,寫法是:賦值的屬性-ref。
---恢復內容結束---
02-spring學習-屬性配置細節