Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。

3、IOC容器-Bean管理XML方式(一):

1、IOC操作Bean管理(xml注入集合属性)

  • 1、注入数组类型属性
  • 2、注入list集合类型属性
  • 3、注入map集合类型属性
  • 4、注入set集合类型属性
类型 方式
数组 <array> <value>C语言</value> </array>
list <list> <value>张三</value> </list>
map <map> <entry key="JAVA" value="java"/></map>
set <set><value>MySQL</value> </set>

2、定义数组、list、map、set 类型属性,生成对应 set 方法

2.1 创建类

package com.zyz.spring5;

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

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/9/25 21:28
 */
public class TestStu {
    /**
     * 1、数组类型属性
     */
    private String [] courses;

    /**
     * 2、list集合类型属性
     */
    private List<String> list;

    /**
     * 3、map集合类型属性
     */
    private Map<String,String> maps;

    /**
     * 4、set集合类型属性
     */
    private Set<String> sets;

    public void setCourses(String[] courses) {
        this.courses = courses;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setMaps(Map<String, String> maps) {
        this.maps = maps;
    }

    public void setSets(Set<String> sets) {
        this.sets = sets;
    }

    @Override
    public String toString() {
        return "TestStu{\n" +
                "courses=" + Arrays.toString(courses) +
                ",\n list=" + list +
                ",\n maps=" + maps +
                ",\n sets=" + sets +
                '}';
    }
}

2.2、编写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">

    <bean id="stu" class="com.zyz.spring5.TestStu">
        <!--1、数组类型属性注入-->
        <property name="courses">
            <array>
                <value>C语言</value>
                <value>Go语言</value>
                <value>Java语言</value>
            </array>
        </property>

        <!--2、list类型属性注入-->
        <property name="list">
            <list>
                <value>张三</value>
                <value>李四</value>
                <value>麻子</value>
            </list>
        </property>

        <!--3、map类型属性注入-->
        <property name="maps">
            <map>
                <entry key="JAVA" value="java"/>
                <entry key="MYSQL" value="mysql"/>
                <entry key="PHP" value="php"/>
            </map>
        </property>

        <!--4、set类型属性注入-->
        <property name="sets">
            <set>
                <value>MySQL</value>
                <value>SQLServer</value>
            </set>
        </property>

    </bean>

</beans>

2.3、测试

package com.zyz.spring5.testdemo;

import com.zyz.spring5.TestStu;
import com.zyz.spring5.dao.Employee;
import com.zyz.spring5.entity.Person;
import com.zyz.spring5.service.CatService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/9/22 22:25
 */
public class SpringTest5 {

    @Test
    public void testSpring(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");
        TestStu testStu = context.getBean("stu",TestStu.class);
        System.out.println(testStu);

    }

}

2.4、测试结果

在这里插入图片描述

3、在集合里面设置对象类型值

主要是ref

3.1 创建一个用户类

package com.zyz.spring5.entity;

import lombok.Data;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/9/22 22:23
 */
public class Person {
    private String address;
    private String name;

    public void setAddress(String address){
        this.address = address;
    }

    public void setName(String name){
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "address='" + address + '\'' +
                ", pname='" + name + '\'' +
                '}';
    }
}

3.2 用户对象作为集合中的值

    /**
     *5、集合中设置对象属性值
     */
    private List<Person> personList;

    public void setPersonList(List<Person> personList){
        this.personList = personList;
    }

3.3 xml配置文件

        <!--5、集合中设置对象属性值-->
        <property name="personList">
            <list >
                <ref bean="person1"/>
                <ref bean="person2"/>
            </list>
        </property>


    </bean>

    <bean id="person1" class="com.zyz.spring5.entity.Person">
        <property name="address" value="河南周口"/>
        <property name="name" value="张三"/>
    </bean>

    <bean id="person2" class="com.zyz.spring5.entity.Person">
        <property name="address" value="河南郑州"/>
        <property name="name" value="李四"/>
    </bean>

在这里插入图片描述

4、集合注入部分提取出来

把集合抽取成为一个公共部分、不同的bean使用。可以达到代码复用

4.1 在 spring 配置文件中引入名称空间 util

在这里插入图片描述

<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <util:list id="bookList">
        <value>高等数学</value>
        <value>大学英语</value>
        <value>大学政治</value>
    </util:list>

    <bean id="testStu" class="com.zyz.spring5.TestStu">
        <property name="list" ref="bookList"></property>
    </bean>

</beans>

4.2 使用 util 标签完成 list 集合注入提取

将对象提取、一般的list提取

<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation=
   "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <util:list id="bookList">
        <value>高等数学</value>
        <value>大学英语</value>
        <value>大学政治</value>
    </util:list>

    <util:list id="personList">
        <ref bean="person1"/>
        <ref bean="person2"/>
    </util:list>

    <bean id="person1" class="com.zyz.spring5.entity.Person">
        <property name="address" value="河南周口"/>
        <property name="name" value="张三"/>
    </bean>

    <bean id="person2" class="com.zyz.spring5.entity.Person">
        <property name="address" value="河南郑州"/>
        <property name="name" value="李四"/>
    </bean>

    <bean id="testStu" class="com.zyz.spring5.TestStu">
        <property name="list" ref="bookList"></property>
        <property name="personList" ref="personList"/>
     </bean>

</beans>

4.3 测试结果

在这里插入图片描述

在这里插入图片描述

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
|
16天前
|
Java 测试技术 程序员
为什么Spring不推荐@Autowired用于字段注入?
作为Java程序员,Spring框架在日常开发中使用频繁,其依赖注入机制带来了极大的便利。然而,尽管@Autowired注解简化了依赖注入,Spring官方却不推荐在字段上使用它。本文将探讨字段注入的现状及其存在的问题,如难以进行单元测试、违反单一职责原则及易引发NPE等,并介绍为何Spring推荐构造器注入,包括增强代码可读性和维护性、方便单元测试以及避免NPE等问题。通过示例代码展示如何将字段注入重构为构造器注入,提高代码质量。
|
17天前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
55 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
3天前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
27 6
|
4天前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
25 2
|
6天前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
21 2
|
11天前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
7天前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
13天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
13 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
13天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
15 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现