(4)Spring學習記錄---Spring_bean(屬性配置細節)
阿新 • • 發佈:2018-11-08
這一節主要學了bean的詳細配置
特殊符號的解決方法:
如果字串裡有特殊符號需要用<![CDATA[]]>
引用其他bean
通過引用來使用bean。有時某類bean包含另一類bean。這裡要用到ref引用
例項:這裡建立兩個類person和car,新增toString方法,構造器
Person.class
public class Person { private String name; private int age; private Car car; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + car + "]"; } }
Car.class
public class Car { private String name; private int speed; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } public Car(String name, int speed) { super(); this.name = name; this.speed = speed; } @Override public String toString() { return "Car [name=" + name + ", speed=" + speed + "]"; } }
applicationContext.xml
在配置資訊裡用ref來引用
<!-- car的bean --> <bean id="car" class="jjh.test.Car"> <constructor-arg value="benchi" type="java.lang.String"></constructor-arg> <constructor-arg value="250" type="int"></constructor-arg> </bean> <!-- Person的bean --> <bean id="person" class="jjh.test.Person"> <property name="name" value="jjh"></property> <property name="age" value="20"></property> <property name="car" ref="car"></property> </bean>
內部bean
內部bean寫在bean的裡面不能被外部bean所引用
<bean id="person" class="jjh.test.Person">
<property name="name" value="jjh"></property>
<property name="age" value="20"></property>
<!-- <property name="car" ref="car"></property> -->
<!--
內部bean
-->
<property name="car">
<bean class="jjh.test.Car">
<constructor-arg value="BAOBA"></constructor-arg>
<constructor-arg value="240"></constructor-arg>
</bean>
</property>
</bean>
null值和級聯屬性
級聯屬性配置的條件:
1.被匯入的bean需要完成初始化(構造器完成)
2.必須匯入該bean的引用
3.為該bean的屬性賦值
<bean id="car" class="jjh.test.Car">
<!-- 1.通過構造器完成初始化 -->
<constructor-arg value="benchi" type="java.lang.String"></constructor-arg>
<constructor-arg value="250" type="int"></constructor-arg>
</bean>
<bean id="person2" class="jjh.test.Person">
<constructor-arg value="jjh" type="java.lang.String"></constructor-arg>
<constructor-arg value="20" type="int"></constructor-arg>
<!-- 2.必須匯入car的引用 -->
<constructor-arg ref="car"></constructor-arg>
<!--
為級聯屬性賦值,注意:屬性需要先初始化後才可以為級聯屬性賦值,不同於struts2
-->
<!--
3.為需要級聯的屬性賦值
-->
<property name="car.name" value="mazida"></property>
</bean>
集合屬性
比如使用List屬性
<bean id="person" class="jjh.test.Person">
<property name="name" value="jjh"></property>
<property name="age" value="21"></property>
<!--
使用List 節點為List型別的屬性賦值
-->
<property name="cars">
<list>
<ref bean="car"/>
<ref bean="car2"/>
<ref bean="car3"/>
</list>
</property>
</bean>
比如使用map屬性
<!--
使用map配置屬性值
-->
<bean id="person" class="jjh.test.Person">
<property name="name" value="jjh"></property>
<property name="age" value="21"></property>
<property name="cars">
<map>
<entry key="aa" value-ref="car"></entry>
<entry key="bb" value-ref="car2"></entry>
<entry key="cc" value-ref="car3"></entry>
</map>
</property>
</bean>
比如使用properties(HashTable的子類)屬性配值
<!-- 配置properties屬性值 -->
<bean id="dataSource" class="jjh.test.DataSource">
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">1234</prop>
<prop key="jdbcurl">jdbc:mysql://test</prop>
<prop key="user">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
使用Utility scheme,當我們想把集合拿出來,公共使用時。
在.xml下的namespace下將util畫√
<!-- 配置單例的集合bean,以供多個bean進行引用 -->
<util:list id="cars">
<ref bean="car" />
<ref bean="car2" />
<ref bean="car3" />
</util:list>
使用p標籤的名稱空間
<!--
通過p名稱空間為bean 的屬性賦值,需要先引入p名稱空間
-->
<bean id="person4" class="jjh.test.Person" p:age="20" p:name="jjh" p:cars-ref="cars">
</bean>