<bean id="compactDisc" class="soundsystem.CompactDisc" /> //声明一个简单的bean
CDPlay通过ID为compactDisc 的bean将其引入(构造器引入bean)
<bean id="cdPlayer" class="soundsystem.CDPlay" >
<constructor-arg ref="compactDisc">
</bean>
也可以使用Spring的c-命名空间,c-命名空间是Spring3.0中引入的。他是在XML中更为了简洁地描述构造参数的方式。要使用它必须在XML的顶部声明
Spring为<constructor-arg>元素提供了c命名空间作为替代方案,用来简化配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
...
</beans>
<bean id = "cdPlayer" calss = "soundsystem.CDPlay" c:cd-ref = "compactDisc">
c命名空间的使用模板: c:构造器参数名-ref="要注入的bean的Id"
值得注意的是,直接把构造参数名称加上c
命名空间的前缀作为bean
的一个属性定义,来替代对应的constructor-arg
只对以debug
方式编译的class
有效,因为debug编译时,要将值保存在类代码中(即我们调试要看到的调试值),对于非debug
方式编译的class
文件Spring
将无法获取到对应构造方法的参数名,这种情况可能无法正常执行。对于这种情况我们可以直接使用构造方法参数的索引加上下划线“_”
前缀来代替对应的参数名,索引是从0开始的,如上面的示例以索引来代替时将是如下这个样子。
<bean id = "cdPlayer" calss = "soundsystem.CDPlay" c:_0-ref = "compactDisc">
如果只有一个构造参数,那么就不需要用标识索引,则:
<bean id = "cdPlayer" calss = "soundsystem.CDPlay" c:_-ref = "compactDisc">
将字面量值直接注入到构造器中
<bean id = "cdPlayer" calss = "soundsystem.CDPlay">
<constructor-arg value="This is a param value">
</bean>
使用命名空间如下:
<bean id = "cdPlayer" calss = "soundsystem.CDPlay"
c:_title = "This is a param value"
c:_artist = " this a one param value" />
可以看到,装配字面量与装配引用分别在属性名去掉了"-ref"后缀,与之类似,可通过索引进行装配
<bean id = "cdPlayer" calss = "soundsystem.CDPlay"
c:_0 = "This is a param value"
c:_1 = " this a one param value" />
如果一个参数:
<bean id = "cdPlayer" calss = "soundsystem.CDPlay"
c:_ = "This is a param value" />
使用<constructor-arg>和c命名空间实现构造器注入时,还是有一些细微的差别,在装配集合方面,<constructor-arg>更有优势,目前使用c命名空间的属性无法实现装配集合的功能