通过XML装配bean(一)

本文介绍了如何在XML中配置Spring Bean,包括通过id属性为bean命名,构造器注入bean引用和字面量,以及使用c-命名空间简化配置。讨论了如何通过构造器参数的名称或索引来指定注入值,并强调了配置与构造器参数顺序的关系。
摘要由CSDN通过智能技术生成

在使用JavaConfig的时候,要创建一个带有@Configuration注解的类;而在XML配置中,意味着要创建一个XML文件,并且要以<\beans>元素为根。在这个根元素中可以声明多个<\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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--声明一个简单的bean-->
    <bean class="org.springaction.Juggler"/>

</beans>

因为没有明确给定ID,所以这个bean将会根据全限定类名进行命名。这个简单的bean的ID将会是”org.springaction.Juggler#0”,其中“#0”是一个计数的形式,用来区分相同类型的其他bean。

如果稍后要引用该bean的话,最好使用id属性,为每个bean设置一个自定义的名字,作为该bean在Spring容器中的引用:

<!--声明一个简单的bean-->
    <bean id="duke" class="org.springaction.Juggler"/>

当Spring发现这个<\bean>元素时,它将会调用Juggler的默认构造器来创建bean。

一、构造器注入bean引用
通过使用<\constructor-arg>元素来告诉Spring在构造bean时,不再只是使用默认无参的构造函数。

public Juggler(CompactDisc cd,CDPlat cdPlat){
        this.cd=cd;
        this.cdPlat=cdPlat;
    }



    <bean id="duke" class="org.springaction.Juggler">
        <!--将多个bean注入到构造器-->
        <constructor-arg ref="sgtPeppers"/>
        <constructor-arg ref="cdPlat"/>
    </bean>

    <bean id="sgtPeppers" class="org.springaction.SgtPeppers"/>

    <bean id="cdPlat" class="org.springaction.CDPlat"/>

可以看到<\constructor-arg>元素比较冗长,可以使用c-命名空间更简洁地描述构造器参数。但是要在XML的顶部申明其模式:

//将该声明添加到顶部
xmlns:c="http://www.springframework.org/schema/c"

对之前的配置进行修改:

<!--利用c命名空间将多个bean注入到构造器-->
    <bean id="duke" class="org.springaction.Juggler"
          c:cd-ref="sgtPeppers"
          c:cdPlat-ref="cdPlat"/>


    <bean id="sgtPeppers" class="org.springaction.SgtPeppers"/>

    <bean id="cdPlat" class="org.springaction.CDPlat"/>

对c命名空间说明一下:属性名以c:开头,也就是命名空间的前缀。接下来就是要装配的构造器参数名,在此之后”-ref”,告诉Spring这是一个bean的引用。

这个其中比较困扰的是它直接引用构造器参数的名称,如果参数的名称修改了,此处的配置也要进行修改,因此可以使用参数在整个参数列表中的位置

<bean id="duke" class="org.springaction.Juggler"
          c:_0-ref="sgtPeppers"
          c:_1-ref="cdPlat"/>

将参数的名字换成索引,从0开始,但是不允许将数字作为第一个字符,所以添加一个下划线作为前缀。这样,即使构造参数的名字发生变化,只要顺序保持不变,配置依然有效。

如果只是有一个构造器参数,可以不用标识参数索引:

<bean id="duke" class="org.springaction.Juggler"
          c:_-ref="sgtPeppers"/>

二、将字面量注入到构造器中:
同样,先使用<\constructor-arg>元素进行构造器参数的注入:

public Juggler(int beanbags,String name){
        this.beanbags=beanbags;
        this.name=name;
    }


<bean id="duke" class="org.springaction.Juggler">
      <!--要按照构造器方法参数列表的顺序-->
        <constructor-arg value="10"/>
        <constructor-arg value="what'up"/>
    </bean>

使用c-命名空间对例子进行修改:

<!--利用c命名空间将多个字面量注入到构造器-->
    <bean id="duke" class="org.springaction.Juggler"
          c:beanbags="10"
          c:name="what'up"/>

也可以通过参数索引装配相同的字面量值:

 <bean id="duke" class="org.springaction.Juggler"
          c:_0="10"
          c:_1="what'up"/>

三、同时装配bean和字面量
使用<\constructor-arg>元素进行构造器参数的注入

public Juggler(int beanbags,String name,CompactDisc cd,CDPlat cdPlat){
        this.beanbags=beanbags;
        this.name=name;
        this.cd=cd;
        this.cdPlat=cdPlat;
    }



<bean id="duke" class="org.springaction.Juggler">
        <constructor-arg value="19"/>
        <constructor-arg value="what'up"/>
        <constructor-arg ref="sgtPeppers"/>
        <constructor-arg ref="cdPlat"/>
    </bean>

利用c-命名空间对其进行修改:

<bean id="duke" class="org.springaction.Juggler"
          c:beanbags="18"
          c:name="what'up"
          c:_2-ref="sgtPeppers"
          c:_3-ref="cdPlat"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值