文章目录
- 字面值注入
- 引入其他的bean
- 内部bean
- 集合属性的装配
- 使用p命名空间
- < null/>标签的使用
- 级联属性
字面值注入
value 属性或者value标签可以设置为字面值,字面值可以是字符串或者基本数据类型,其他类型不能使用字面值
<bean id="car3" class="com.wanee.di.Car">
<property name="color">
<value>black</value>
</property>
<property name="price" value="400000"></property>
</bean>
<!--
- 注意点:如果车的品牌<Benz>,虽然是字符串,但是<>是xml中的特殊字符,表示标签的开始和结束
这个时候我们可以使用CDATA标签将特殊字符包裹起来,如<![CDATA[<Benz>]]> 实际的值就是 <Benz>
以后凡是在xml文件,需要用到特殊字符,都可以使用CDATA标签进行包裹
-->
<bean id="car3" class="com.wanee.di.Car">
<property name="barnd">
<value><![CDATA[<Benz>]]></value>
</property>
</bean>
引入其他的bean
ref 或者ref标签: 表示引用其他的bean
<bean id="person" class="com.wanee.di.Person">
<!--
使用property标签完成属性注入
name : javaBean风格的属性名,就是setter方法对应的属性名
value 或者value标签: 给属性设置的字面值[String,基本数据类型]
ref 或者ref标签: 表示引用其他的bean
-->
<property name="age">
<value>19</value>
</property>
<property name="name">
<value>白骨精</value>
</property>
<property name="car">
<ref bean="car3"/>
</property>
<property name="car" ref="car3"></property>
</bean>
<bean id="car3" class="com.wanee.di.Car">
<property name="color">
<value>black</value>
</property>
<property name="price" value="400000"></property>
</bean>
需要注意:我们现在不管使用ref属性还是ref标签去引用其他的bean,这个其他的bean是外部的bean,而且这个外部的bean也可以被其他的bean进行引用。在实际开发中,可能存在一种情况,一个对象引用的bean,不希望被其他对象引用,这个时候可以使用内部bean。
内部bean
<bean id="person" class="com.wanee.di.Person">
<property name="age">
<value>19</value>
</property>
<property name="name">
<value>白骨精</value>
</property>
<property name="car">
<!-- 定义内部bean:一个bean被定义在另外一个bean的内部,而且这个内部bean不能够被其他的外部bean引用
既然不能够被外部bean引用,那么这个内部bean的id属性就没有意义,可以省略
-->
<bean class="com.wanee.di.Car">
<property name="barnd">
<value><![CDATA[<Benz>]]></value>
</property>
<property name="color" value="black"></property>
<property name="price" value="400000"></property>
</bean>
</property>
</bean>
构造注入中使用内部bean
<!--
在构造注入中使用内部bean
public Person(String name, Integer age, Car car) {
-->
<bean id="person1" class="com.wanee.di.Person">
<constructor-arg value="jjm"></constructor-arg>
<constructor-arg value="30"></constructor-arg>
<constructor-arg>
<bean class="com.wanee.di.Car">
<property name="barnd">
<value>Chery</value>
</property>
<property name="color" value="gold"></property>
<property name="price" value="50000"></property>
</bean>
</constructor-arg>
</bean>
集合属性的装配
Spring配置文件中,可以使用一组内置的xml标签来配置集合属性
- array标签:可以装配array,list和set属性
- list标签: 可以装配list,set和array属性
- set标签:可以装配set,list和array属性
实际开发中,还存在一种情况:array,list或者set如果装配了外部的其他bean,但是除了外部的bean之外, array,list或者set还需要装配其他的bean,而且其他bean可以不被外部访问到,那么意味着可以装配内部bean - map 标签:装配map属性
private String name;
private Integer age;
private Car[] carArray;
private List<Car> carList;
private Set<Car> carSet;
private Map<String,Car> carMap;
private Properties myProps;
<bean id="car1" class="com.wanee.list.Car">
<property name="barnd" value="Benz"></property>
<property name="color" value="gold"></property>
</bean>
<bean id="car2" class="com.wanee.list.Car">
<property name="barnd" value="BMW"></property>
<property name="color" value="white"></property>
</bean>
<bean id="car3" class="com.wanee.list.Car">
<property name="barnd" value="Audi"></property>
<property name="color" value="black"></property>
</bean>
<bean id="person" class="com.wanee.list.Person">
<property name="name" value="lzd"></property>
<property name="age" value="18"></property>
<!-- 装配数组 -->
<property name="carArray">
<array>
<ref bean="car1"/>
<ref bean="car2"/>
<ref bean="car3"/>
<!-- 内部bean -->
<bean class="com.wanee.list.Car">
<property name="barnd" value="Chery"></property>
<property name="color" value="gold"></property>
</bean>
</array>
</property>
!-- 装配list -->
<property name="carList">
<list>
<ref bean="car1"/>
<ref bean="car2"/>
<ref bean="car3"/>
<!-- 内部bean -->
<bean class="com.wanee.list.Car">
<property name="barnd" value="Chery"></property>
<property name="color" value="gold"></property>
</bean>
</list>
</property>
<!-- 装配set -->
<property name="carSet">
<set>
<ref bean="car1"/>
<ref bean="car2"/>
<ref bean="car3"/>
<!-- 内部bean -->
<bean class="com.wanee.list.Car">
<property name="barnd" value="Chery"></property>
<property name="color" value="gold"></property>
</bean>
</set>
</property>
<!--
装配map 使用map标签
entry 标签:装配一个键值对
- key : 键
- key-ref : 键引用的bean
- value:值
- value-ref:值引用的bean
-->
<property name="carMap">
<map>
<entry key="小1" value-ref="car1"></entry>
<entry key="小2" value-ref="car2"></entry>
<entry key="小3" value-ref="car3"></entry>
<entry key="小4">
<!-- 内部bean -->
<bean class="com.wanee.list.Car">
<property name="barnd" value="Chery"></property>
<property name="color" value="gold"></property>
</bean>
</entry>
</map>
</property>
<!-- 配置properties -->
<property name="myProps">
<map>
<entry key="testA" value="aaa"></entry>
<entry key="testB">
<value>bbb</value>
</entry>
</map>
</property>
</bean>
使用p命名空间
P命名空间是为了简化xml的配置,从spring2.5版本之后引入了一个新的p命名空间,可以通过bean原生的属性方式,来装配bean的属性,使用了p命名空间之后,基于xml的配置bean的方式将进一步简化。
- 加入p命名空间
- 在Spring的配置文件中使用p命名空间
<!-- 使用p命名空间完成属性注入 -->
<bean id="person3" class="com.wanee.list.Person" p:name="qxxz" p:age="19" p:car="car3">
</bean>
<bean id="car3" class="com.wanee.di.Car">
<property name="barnd">
<value><![CDATA[<Benz>]]></value>
</property>
<property name="color" value="black"></property>
<property name="price" value="400000"></property>
</bean>
< null/>标签的使用
<!--
需求: 不想给name属性设置值
- 不给name属性设置property标签
- 使用 <null/>标签完成
实际上<null/>和不配置属性效果一致,所以我们开发如果有这样的需求,不配置就可以了。
-->
<bean id="person4" class="com.wanbangee.list.Person">
<property name="name">
<null/>
</property>
<property name="age" value="20"></property>
</bean>
级联属性
<!--
需求:人有一辆车
- 可以使用引用外部bean或者装配内部bean的形式完成
- 这个人的车在引用的外部bean或者内部bean的基础上进行了改装
- 品牌:BenzX
- 颜色:Red
- 我们可以直接修改外部bean或者内部bean,但是这些bean可能被其他bean引用了,所以不能在原始bean的基础上修改
这个时候我们就可以使用spring配置中支持的级联属性进行重新配置级联属性的值
-->
<bean id="person5" class="com.wanbangee.list.Person">
<property name="name" value="jjm"></property>
<property name="age" value="32"></property>
<property name="car" ref="car1"></property>
<property name="car.barnd" value="BenzX"></property>
<property name="car.color" value="Red"></property>
</bean>
<bean id="car1" class="com.wanee.di.Car">
<property name="barnd">
<value><![CDATA[<Benz>]]></value>
</property>
<property name="color" value="black"></property>
<property name="price" value="400000"></property>
</bean>