通过XML装配bean(一)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用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"/>
在Spring框架中通过XML文件装配Bean,需要按照以下步骤进行配置: 1. 在`resources`文件夹下创建XML文件(如`applicationContext.xml`),该文件作为Spring对象管理的配置文件。基础配置代码如下: ```xml <?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 http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Spring配置文件内容 --> </beans> ``` 这个XML文件使用`<beans>`根元素来定义和管理Bean[^2]。 2. 在`<beans>`标签内添加`<bean>`元素来声明具体的Bean实例。例如,要声明个名为`AiocloudService`的Bean,可以使用如下代码: ```xml <bean class="com.pany.camp.service.AiocloudService" /> ``` `<bean>`元素类似于JavaConfig中的`@Bean`注解[^3]。 3. 如果需要对Bean进行更详细的配置,比如设置属性值或者依赖注入,可以在`<bean>`标签内部添加相应的子元素。例如,如果`AiocloudService`类有个名为`dataSource`的属性,并且这个属性是个引用类型,则可以通过`<property>`标签来进行设置: ```xml <bean id="aiocloudService" class="com.pany.camp.service.AiocloudService"> <property name="dataSource" ref="dataSourceBean"/> </bean> <bean id="dataSourceBean" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> <property name="username" value="root"/> <property name="password" value="password"/> </bean> ``` 上述例子中,`<property>`标签用于设置Bean的属性值,其中`ref`属性用来指定另Bean的ID,而`value`属性则用来直接提供个字符串值[^4]。 4. 配置完成后,在应用程序中加载XML配置文件并获取Bean实例。通常这会涉及到创建`ApplicationContext`接口的实现类,例如`ClassPathXmlApplicationContext`,然后通过它来获取所需的Bean: ```java ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); AiocloudService service = (AiocloudService) context.getBean("aiocloudService"); ``` 5. 除了手动配置每个Bean之外,还可以利用Spring提供的组件扫描功能自动检测和注册Bean。为此,你需要在XML配置文件中启用组件扫描,通过`<context:component-scan>`标签指定要扫描的包路径: ```xml <context:component-scan base-package="com.pany.camp" /> ``` 当启用了组件扫描后,Spring会自动查找带有特定注解(如`@Component`, `@Service`, `@Repository`等)的类,并将它们注册为Spring应用上下文中的Bean[^5]。 以上就是在Spring框架中通过XML文件装配Bean的基本方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值