在Spring配置文件中,用户不但可以将String、int等字面值注入到Bean中,还可以将集合、Map等类型的数据注入到Bean中,此外还可以注入配置文件中其他定义的Bean。
1.字面值
所谓“字面值”一般是指可用字符串表示的值,这些值可以通过< value >元素标签进行注入。在默认情况下,基本数据类型及其封装类、String等类型都可以采取字面注入的方式。
在下面的示例中,我们为Car注入了两个属性值并在Spring配置文件中使用字面值提供配置值:
<bean id="car" class="com.baobaotao.attr.Car">
<property name="maxSpeed"><value>200</value></property>
<property name="brand"><value><![CDATA[红旗&CA72]]></value></property>
</bean>
由于brand属性值value:红旗&CA72里面包含了一个XML特殊符号,因此我们特意在属性值外添加了一个 <![CDATA[]]> 的XML特殊处理标签,<![CDATA[]]>的作用是让XML解析器将标签中的字符串当作普通的文本对待,以防止某些字符串对XML格式造成破坏。
XML中共有5个特殊的字符,分别是 & < > " ’ 。如果配置文件中的注入值包括这些特殊字符,就需要特殊的处理。处理方式包括1.使用上面使用过的< ![CDATA[]] >这一特殊处理标签。2.使用XML转义序列表示这些特殊的字符,这5个特殊字符所对应的XML转移序列见下表:
特殊符号 | 转义序列 |
---|---|
< | < ; |
< | > ; |
& | & |
" | " ; |
’ | &apos ; |
如果使用XML转义序列,我们可以使用以下的配置进行替换:
<property name="brand"><value>红旗&CA72</value></property>
同时,我们还需要注意:一般情况下,XML解析器会忽略元素标签内部字符串的前后空格,但Spring却不忽略元素标签内部字符串的前后空格,如我们通过以下的配置为brand属性提供注入值:
<property name="brand"><value>空格红旗CT72空格</value></property>
Spring会将”红旗CT72“连同前后空格一起赋给brand属性。
2.引用其他Bean
Spring IoC容器中定义的Bean可以相互引用,IoC容器充当着红娘的作用。下面我们创建一个新的Boss类,Boss类中拥有一个Car类型的属性:
package com.baobaotao.attr;
public class Boss {
private Car car;
public void setCar(Car car){
this.car=car;
}
}
boss的Bean通过< ref >元素引用car Bean,建立其boss对car的依赖:
<?xml version="1.0" encoding="UTF-8"?>
<bean id="car" class="com.baobaotao.attr.Car"/>
<bean id="boss" class="com.baobaotao.attr.Boss">
<property name="car"> <ref bean="car"></ref></property>
</bean>
< ref >元素可以通过以下三个属性引用容器中的其他Bean。
1.bean:通过该属性可以引用同一容器或父容器的Bean,这是最常见的形式。
2.local:通过概述性只能引用同一配置文件中定义的Bean,它可以利用XML解析器自动检查引用的合法性,以便在