Spring Bean的装配方式 第1关:基于 XML 的 Bean 装配

本文介绍了如何在Spring框架中使用基于XML的Bean装配,包括设值注入和构造注入两种方式。首先,展示了如何创建一个名为Student的类,然后在Spring配置文件中配置设值注入和构造注入的Bean。接着,通过测试类验证了这两种注入方式的正确性,输出了装配后的Bean实例。编程任务要求使用相同的方法装配Person类,设值注入的属性值为'张三'和'男',构造注入的属性值为'李四'和'女'。

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

目录

任务描述

相关知识

基于 XML 的 Bean 装配简介

基于 XML 的 Bean 装配实例

创建 Spring 配置文件

创建测试类

编程要求

测试说明

参考答案​​​​​​​


任务描述

本关任务:分别使用设值注入和构造注入的方式装配 Person 实例。

相关知识

为了完成本关任务,你需要掌握如何使用基于 XML 的 Bean 装配。

基于 XML 的 Bean 装配简介

Spring 基于 XML 的装配通常有两种实现方式,一是设值注入,二是构造注入。 在 Spring 实例化 Bean 的过程中,首先会调用默认的构造方法实例化 Bean 对象,然后通过 Java 的反射机制调用 setXxx() 方法进行属性的注入。因此,设值注入要求一个 Bean 的对应类必须满足两个要求:一是提供一个无参构造方法;二是为需要注入的属性提供对应的 setter 方法。

使用设值注入时,在配置文件 applicationContext.xml 中需要使用 bean 元素的子元素 property 为每个属性注入值。

使用构造注入时,在配置文件中,需要使用 constructor-arg 标签定义构造方法的参数,可以使用其 value 属性设置该参数的值。

基于 XML 的 Bean 装配实例

创建 Student 类

创建一个 Spring 项目,在项目的 src 目录下,创建一个名称为 educoder 的包,在该包下创建一个 Student 类,如下所示。

package educoder;
public class Student {
    // 属性值 name
    private String name;
    // 属性值 age
    private int age;
    // 无参构造方法
    public Student() {
    }
    // 有参构造方法
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }
    // 重写 tostring 方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    // get 和 set 方法
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

上述代码中,定义了 name 和 age 两个属性,并为其提供了 getter 和 setter 方法,由于要使用构造注入,所以提供了有参的构造方法。为了能更清楚地看到输出结果,这里还重写了 toString() 方法。

创建 Spring 配置文件

在项目的 educoder 包下创建一个名为 applicationContext.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" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    <!-- 使用设值注入方式装配 Student 实例 -->
    <bean id="student1" class="educoder.Student">
        <property name="name" value="张三" />
        <property name="age" value="25" />
    </bean>
    <!-- 使用构造方法装配 Student 实例 -->
    <bean id="student2" class="educoder.Student">
        <constructor-arg index="0" value="李四" />
        <constructor-arg index="1" value="24" />
    </bean>
</beans>

上述代码中,首先使用了设值注入方式装配 Student 类的实例,其中 property 子元素用于调用 Bean 实例中的 setXxx() 方法完成属性赋值。然后使用了构造方式装配了 Student 类的实例,其中 constructor-arg 元素用于定义构造方法的参数,其属性 index 表示其索引(从 0 开始),value 属性用于设置注入的值。

创建测试类

在 educoder 包下创建一个名称为 MyTest 的测试类,编辑后如下所示。

package educoder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
    public static void main(String[] args) {
        String path="educoder/applicationContext.xml";
        // 初始化Spring容器,加载配置文件,并对bean进行实例化
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(path);
        // 设值方式输出结果
        System.out.println(applicationContext.getBean("student1"));
        // 构造方式输出结果
        System.out.println(applicationContext.getBean("student2"));
    }
}

执行结果:

  1. Student{name='张三', age=25}
  2. Student{name='李四', age=24}

从结果中可以看出,使用设值注入和构造注入两种方式都成功装配了 Student 实例。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,分别使用设值注入和构造注入的方式装配 Bean,具体要求如下:

  • Bean 实例为 Person 类,已知 Person 类的属性值为 name(姓名) 和 sex(性别),请在 Person.java 文件中补充该类;
  • 在 applicationContext.xml 文件中分别使用设值注入和构造注入的方式装配 Person 实例,设值注入的属性值分别设置为---张三、男,bean 的 id 设置为 person1,构造注入的属性值分别设置为---李四、女,bean 的 id 设置为 person2。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

可在右侧 “测试结果”区查看具体的测试集详情。 测试输入: 无 预期输出:

  1. Person{name='张三', sex='男'}
  2. Person{name='李四', sex='女'}

开始你的任务吧,祝你成功!

参考答案

Person.java

package educoder;
public class Person {
    // 属性值 name
    private String name;
    // 属性值 sex
    private String sex;
    // 请在此处编写代码
    /********* Begin *********/
    public Person() {
    }

    public Person(String name,String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    /********* End *********/
    // 重写 toString 方法
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

applicationContext.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" 
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    <!-- 使用设值注入方式装配 Student 实例 -->
    <bean id="person1" class="educoder.Person">
        <property name="name" value="张三" />
        <property name="sex" value="男" />
    </bean>
    <!-- 使用构造方法装配 Student 实例 -->
    <bean id="person2" class="educoder.Person">
        <constructor-arg index="0" value="李四" />
        <constructor-arg index="1" value="女" />
    </bean>
</beans>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

于建章

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

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

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

打赏作者

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

抵扣说明:

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

余额充值