Spring Bean的装配方式(基于XML配置的装配)

本文深入探讨了Spring框架中基于XML的两种装配方式:构造方法注入和属性的setter方法注入。通过实例展示了如何在配置文件中定义Bean,包括基本类型、集合类型及复杂类型的注入。

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

基于XML配置的装配

  • 基于XML配置的装配方式已经有了很久的历史,曾经是主要的装配方式。通过学习,我们知道Spring提供了两种基于XML的装配方式,即使用构造方法注入和使用属性的setter方法注入。
  • 在使用构造方法注入方式装配Bean时,Bean的实现类需要提供参数的构造方法,并在配置文件中使用<bean元素上单子元素<constructor-arg来定义提供构造方法的参数,在使用属性的setter方法注入方式装配Bean时,Bean的实现类需要提供一个默认无参的构造方法,并为需要注入的属性提供对应的setter方法,另外还需要使用<bean元素的子元素<property为每个属性注入值
  • 通过一个实例来演示基于XML装配的装配方式
    1.创建Bean的实体类
    在ComplexUser类中分别使用构造方法注入和使用属性的setter方法注入。
package assemble;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class ComplexUser {
    private String uname;
    private List<String> hobbyList;
    private Map<String,String> residenceMap;
    private Set<String> aliasSet;

    public void setAliasSet(Set<String> aliasSet) {
        this.aliasSet = aliasSet;
    }

    private String[] array;

    public String getUname() {
        return uname;
    }

    public List<String> getHobbyList() {
        return hobbyList;
    }

    public Map<String, String> getResidenceMap() {
        return residenceMap;
    }

    public Set<String> getAliasSet() {
        return aliasSet;
    }

    public String[] getArray() {
        return array;
    }


    /*
        使用构造方法注入  需要提供带参数的构造方法
     */
    public ComplexUser (String uname, List<String> hobbyList, Map<String, String> residenceMap,
                       Set<String> aliasSet, String... array) {
        super();
        this.uname = uname;
        this.hobbyList = hobbyList;
        this.residenceMap = residenceMap;
        this.aliasSet = aliasSet;
        this.array = array;
    }
    /*
    使用属性的setter方法注入  提供默认无参数的构造方法 并为注入的属性提供setter方法
     */
  public ComplexUser(){
      super();
  }
    public void setUname(String uname) {
        this.uname = uname;
    }

    public void setHobbyList(List<String> hobbyList) {
        this.hobbyList = hobbyList;
    }

    public void setResidenceMap(Map<String, String> residenceMap) {
        this.residenceMap = residenceMap;
    }


    public void setArray(String[] array) {
        this.array = array;
    }

    @Override
    public String toString(){
      return "uname="+uname+",hobbyList"+hobbyList+",residenceMap="+residenceMap+
        ",aliasSet="+aliasSet+",array="+array;
    }




}

2 配置Bean

 <!--使用构造方法注入方式装配ComplexUser实例user1-->
    <bean id="user1"  class="assemble.ComplexUser">
        <constructor-arg index="0" value="chenheng1"/>
        <constructor-arg index="1">
            <list>
               <value>唱歌</value>
                <value>跳舞</value>
                <value>爬山</value>
            </list>
        </constructor-arg>
        <constructor-arg index="2">
            <map>
                <entry key="dakuab"  value="大连"/>
                <entry key="beijing"  value="北京"/>
                <entry key="shanghai"  value="上海"/>
            </map>
        </constructor-arg>
        <constructor-arg index="3">
            <set>
                <value>1001</value>
                <value>1002</value>
                <value>1003</value>
            </set>
        </constructor-arg>
        <constructor-arg index="4">
            <array>
                <value>aaaaa</value>
                <value>bbbbb</value>
            </array>
        </constructor-arg>
    </bean>
    <!--使用属性的setter方法注入方式装配ComplexUser实例user2-->
    <bean id="user2" class="assemble.ComplexUser">
        <property name="uname" value="chengheng2"></property>
        <property name="hobbyList">
            <list>
                <value>看书</value>
                <value>敲代码</value>
            </list>
        </property>
        <property name="residenceMap">
            <map>
                <entry key="shenzhen" value="深圳"></entry>
                <entry key="gaungzhou" value="广州"></entry>
                <entry key="tianjin" value="天津"></entry>
            </map>
        </property>
        <property name="aliasSet">
            <set>
                <value>陈汉1001</value>
                <value>陈汉1002</value>
            </set>
        </property>
        <property name="array">
            <array>
                <value>ccccc</value>
                <value>ddddd</value>
            </array>
        </property>

    </bean>


3.测试代码

package test;

import assemble.ComplexUser;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TesAssemble {
    public static void main(String[] args) {
        ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext");
//构造方法
        ComplexUser u1= (ComplexUser) appCon.getBean("user1");
        System.out.println(u1);
        //setter方式
        ComplexUser u2=(ComplexUser)appCon.getBean("user2");
        System.out.println(u2);
        

    }
}

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值