最常见的注入类型是字面值注入,像String和基本类型的包装类在Spring中都是有 属性编辑器帮助注入的。另外还有对象的注入,集合类的注入。
1.字面值
所谓字面值,一般是指可用字符串表示的值,这些值可以通过<value>元素标签进行注入。在默认情况下,基本数据类型及其封装类,String等类型都可以采取字面值注入的方式。
<bean id="car" class="com.firethewhole.maventest06.attr.Car"> <property name="maxSpeed"> <value>200</value> </property> <property name="brand"> <value><![CDATA[红旗&CA72]]></value> </property> <property name="price"> <value>2000.00</value> </property> </bean>
****在XML中表示"<",">","&","""(双引号),"'"(单引号)这些的时候,要么使用<![CDATA[]]>包起来,要么使用转义序列。
特殊符号 | 转义序列 |
< | < |
> | > |
& | & |
" | " |
' | ' |
2.引用其他Bean
<bean id="boss" class="com.firethewhole.maventest06.attr.Boss"> <property name="car"> <ref bean="car"/> </property> </bean>
<ref>元素可以通过以下三个属性引用容器中其他Bean。
- bean:引用同一容器或父容器的Bean。
- local:只能引用同一配置文件中的Bean。
- parent:引用父容器中的Bean。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans spring-beans-4.1.xsd"> <bean id="car" class="com.firethewhole.maventest06.attr.Car"> <property name="brand" value="吉利CT5" /> <property name="maxSpeed" value="100" /> <property name="price" value="1000.00" /> </bean> <bean id="boss2" class="com.firethewhole.maventest06.attr.Boss"> <property name="car"> <ref parent="car"/> </property> </bean> </beans>
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans1.xml"); ApplicationContext child = new ClassPathXmlApplicationContext(new String[] { "beans2.xml" }, ctx); Boss boss2 = (Boss) child.getBean("boss2"); boss2.introduce();
3.引用内部Bean
<bean id="boss3" class="com.firethewhole.maventest06.attr.Boss"> <property name="car"> <bean class="com.firethewhole.maventest06.attr.Car"> <property name="maxSpeed" value="300"/> <property name="brand" value="雷克萨斯"/> <property name="price" value="90000.00"/> </bean> </property> </bean>
4.引用null值
如果确实要引入null值的话,需要使用标签<null/>
5.集合类型
主要有List,Set,Map,Props
<bean id="boss4" class="com.firethewhole.maventest06.attr.AnotherBoss"> <property name="favorites"> <list> <value>看报</value> <value>赛车</value> <value>高尔夫</value> </list> </property> <property name="jobs"> <map> <entry> <key><value>AM</value></key> <value>会见客户</value> </entry> <entry> <key><value>PM</value></key> <value>公司内部会议</value> </entry> </map> </property> <property name="mails"> <props> <prop key="jobMail">[email protected]</prop> <prop key="lifeMail">[email protected]</prop> </props> </property> <property name="jobTimes"> <map> <entry> <key><value>会见客户</value></key> <value>124</value> </entry> </map> </property> </bean>
****如果属性为Set类型,可以在配置文件中yong<set>替换掉<list>,泛型的集合类会判断注入类型,自动进行类型转换。
6.集合合并
这一块暂时跳过不写。
7.注入集合类型的Bean
如果希望注入集合类型的Bean,而不是集合类型的属性,则需要通过util命名空间进行配置。比如声明了集合类型的Bean之后,可以在属性中直接引用,不用采用上面的内部Bean的配置方式了。
引入命名空间xmlns:util="http://www.springframework.org/schema/util"
<util:list id="favoritieList" list-class="java.util.LinkedList"> <value>看报</value>个 <value>赛车</value> <value>高尔夫</value> </util:list> <util:set id="favoriteSet"> <value>看报</value> <value>赛车</value> <value>高尔夫</value> </util:set> <util:map id="emailMap"> <entry key="AM" value="会见客户"/> <entry key="PM" value="公司内部会议"/> </util:map>
此外<util:list><util:set>还支持value-type,用于指定集合中元素的类型。<util:map>还支持key-type和value-type,指定Map中键和值的类型。