• Spring基于XML装配Bean


    Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式。Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配、基于 Annotation 的 Bean 装配和自动装配等。

    Spring 基于 XML 的装配通常采用两种实现方式,即设值注入(Setter Injection)和构造注入(Constructor Injection)。本节将讲解如何在 XML 配置文件中使用这两种注入方式。

    在 Spring 实例化 Bean 的过程中,首先会调用默认的构造方法实例化 Bean 对象,然后通过 Java 的反射机制调用 setXxx() 方法进行属性的注入。因此,设值注入要求一个 Bean 的对应类必须满足以下两点要求。

    • 必须提供一个默认的无参构造方法。
    • 必须为需要注入的属性提供对应的 setter 方法。

    使用设值注入时,在 Spring 配置文件中,需要使用 元素的子元素 元素为每个属性注入值。而使用构造注入时,在配置文件中,主要使用 标签定义构造方法的参数,可以使用其 value 属性(或子元素)设置该参数的值。下面通过案例演示基于 XML 方式的 Bean 的装配。

    1. 创建 Person 类

    在项目 springDemo02 中的 src 目录下,创建一个名称为 com.mengma.assembly 的包,在该包下创建一个 Person 类,如下所示。

    1. package com.mengma.assembly;
    2. public class Person {
    3. private String name;
    4. private int age;
    5. public String getName() {
    6. return name;
    7. }
    8. public void setName(String name) {
    9. this.name = name;
    10. }
    11. public int getAge() {
    12. return age;
    13. }
    14. public void setAge(int age) {
    15. this.age = age;
    16. }
    17. // 重写toString()方法
    18. public String toString() {
    19. return "Person[name=" + name + ",age=" + age + "]";
    20. }
    21. // 默认无参的构造方法
    22. public Person() {
    23. super();
    24. }
    25. // 有参的构造方法
    26. public Person(String name, int age) {
    27. super();
    28. this.name = name;
    29. this.age = age;
    30. }
    31. }

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

    2. 创建 Spring 配置文件

    在 com.mengma.assembly 包下创建一个名为 applicationContext.xml 的配置文件,如下所示。

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans
    4. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    5. <bean id="person1" class="com.mengma.assembly.Person">
    6. <property name="name" value="zhangsan" />
    7. <property name="age" value="20" />
    8. bean>
    9. <bean id="person2" class="com.mengma.assembly.Person">
    10. <constructor-arg index="0" value="lisi" />
    11. <constructor-arg index="1" value="21" />
    12. bean>
    13. beans>

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

    3. 创建测试类

    在 com.mengma.assembly 包下创建一个名称为 XmlBeanAssemblyTest 的测试类,编辑后如下所示。

    1. package com.mengma.assembly;
    2. import org.junit.Test;
    3. import org.springframework.context.ApplicationContext;
    4. import org.springframework.context.support.ClassPathXmlApplicationContext;
    5. public class XmlBeanAssemblyTest {
    6. @Test
    7. public void test() {
    8. // 定义Spring配置文件路径
    9. String xmlPath = "com/mengma/assembly/applicationContext.xml";
    10. // 初始化Spring容器,加载配置文件,并对bean进行实例化
    11. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
    12. xmlPath);
    13. // 设值方式输出结果
    14. System.out.println(applicationContext.getBean("person1"));
    15. // 构造方式输出结果
    16. System.out.println(applicationContext.getBean("person2"));
    17. }
    18. }

    上述代码中,分别获取并输出了 id 为 person1 和 person2 的实例。

    4. 运行项目并查看结果

    使用 JUnit 测试运行 test() 方法,运行成功后,控制台的输出结果如图 1 所示。


    图 1 输出结果

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

     

  • 相关阅读:
    flutter系列之:深入理解布局的基础constraints
    【智能合约】 函数动态调用-call函数和fallback函数
    2019CSP 第一轮认证模拟题
    京东按关键字搜索商品 API 返回值说明
    华为机试真题 Java 实现【最大花费金额】
    隆云通土壤pH传感器(扁三针)
    SpringBoot SpringBoot 基础篇 2 SpringBoot 基础配置 2.3 配置文件类型
    如何在latex中高亮文本
    【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统
    2020年9月大学英语六级翻译
  • 原文地址:https://blog.csdn.net/unbelievevc/article/details/126278157