xml通过构造器注入初始化bean && c命名空间

 

<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命名空间的属性无法实现装配集合的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三丶竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值