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

猜你喜欢

转载自blog.csdn.net/m0_37668842/article/details/82715398