Spring5源码(6)-Spring注入集合属性

简介: Spring5源码(6)-Spring注入集合属性


Spring的依赖注入方式大体上可以分为三种:

  • 构造函数注入
  • Setter方法注入
  • 方法注入 (lookup-method注入和replace-method注入)

构造函数注入可参考 04--Spring实例化Bean的三种方式
,本篇介绍通过Setter方法注入集合属性。下一篇介绍方法注入。

  • bean

package com.lyc.cn.v2.day01.collection;
import org.springframework.util.CollectionUtils;
import java.util.*;
/**
 * 集合属性注入
 * @author: LiYanChao
 * @create: 2018-09-29 15:46
 */
public class Cat {
    /** 注入List集合 **/
    private List<String> listNames;
    /***注入Set集合*/
    private Set<String> setNames;
    /** 注入Properties **/
    private Properties propertiesNames;
    /** 注入Map集合 **/
    private Map<String, String> mapNames;
    /** 注入数组 **/
    private String[] arrayNames;
    /**
     * 打印数组集合
     */
    public void sayArrayNames() {
        System.out.println("注入数组-->");
        if (arrayNames != null && arrayNames.length > 0) {
            for (int i = 0; i < arrayNames.length; i++) {
                System.out.println(arrayNames[i]);
            }
        }
        System.out.println();
    }
    /**
     * 打印Map集合
     */
    public void sayMapNames() {
        if (null != mapNames && mapNames.size() > 0) {
            System.out.println("注入Map集合-->");
            for (Map.Entry<String, String> entry : mapNames.entrySet()) {
                System.out.println("key= " + entry.getKey() + " value= " + entry.getValue());
            }
            System.out.println();
        }
    }
    /**
     * 打印Properties属性
     */
    public void sayPropertiesNames() {
        if (null != propertiesNames) {
            System.out.println("注入properties属性-->");
            System.out.println(propertiesNames.get("name"));
            System.out.println(propertiesNames.get("age"));
            System.out.println();
        }
    }
    /**
     * 打印List集合
     */
    public void sayListNames() {
        if (!CollectionUtils.isEmpty(listNames)) {
            System.out.println("注入List集合-->");
            for (String string : listNames) {
                System.out.println(string);
            }
            System.out.println();
        }
    }
    /**
     * 打印Set集合
     */
    public void saySetNames() {
        if (!CollectionUtils.isEmpty(setNames)) {
            System.out.println("注入Set集合-->");
            Iterator<String> iterator = setNames.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
            System.out.println();
        }
    }
    public List<String> getListNames() {
        return listNames;
    }
    public void setListNames(List<String> listNames) {
        this.listNames = listNames;
    }
    public Set<String> getSetNames() {
        return setNames;
    }
    public void setSetNames(Set<String> setNames) {
        this.setNames = setNames;
    }
    public Properties getPropertiesNames() {
        return propertiesNames;
    }
    public void setPropertiesNames(Properties propertiesNames) {
        this.propertiesNames = propertiesNames;
    }
    public Map<String, String> getMapNames() {
        return mapNames;
    }
    public void setMapNames(Map<String, String> mapNames) {
        this.mapNames = mapNames;
    }
    public String[] getArrayNames() {
        return arrayNames;
    }
    public void setArrayNames(String[] arrayNames) {
        this.arrayNames = arrayNames;
    }
}
  • xml

<!--集合属性注入-->
<bean id="cat" class="com.lyc.cn.v2.day01.collection.Cat">
    <!--注入List集合-->
    <property name="listNames">
        <!-- merge 父子bean是否合并条目 -->
        <list value-type="java.lang.String" merge="false">
            <value>张三</value>
            <value>李四</value>
            <value>王五</value>
        </list>
    </property>
    <!--注入Set集合-->
    <property name="setNames">
        <set value-type="java.lang.String" merge="true">
            <value>张三</value>
            <value>李四</value>
            <value>王五</value>
        </set>
    </property>
    <!--注入Map集合-->
    <property name="mapNames">
        <map key-type="java.lang.String" value-type="java.lang.String">
            <entry key="name" value="小明"/>
            <entry key="age" value="3"/>
        </map>
    </property>
    <!--注入数组-->
    <property name="arrayNames">
        <array value-type="java.lang.String">
            <value>张三</value>
            <value>李四</value>
            <value>王五</value>
        </array>
    </property>
    <!--注入Properties-->
    <property name="propertiesNames">
        <props value-type="java.lang.String">
            <prop key="name">小明</prop>
            <prop key="age">3</prop>
        </props>
    </property>
</bean>
  • 测试

@Test
public void test7() {
    // 注入集合属性
    Cat cat = xmlBeanFactory.getBean("cat", Cat.class);
    cat.sayListNames();
    cat.saySetNames();
    cat.sayArrayNames();
    cat.sayMapNames();
    cat.sayPropertiesNames();
}
  • 结果

========测试方法开始=======
注入List集合-->
张三
李四
王五
注入Set集合-->
张三
李四
王五
注入数组-->
张三
李四
王五
注入Map集合-->
key= name value= 小明
key= age value= 3
注入properties属性-->
小明
3
========测试方法结束=======

本节内容基于配置,说明可参考配置文件说明。




目录
相关文章
|
4天前
|
运维 Java 程序员
Spring5深入浅出篇:Spring切入点详解
该文档是关于Spring框架中切入点的详细解释。切入点是AOP(面向切面编程)的核心概念,用于定义通知(如日志、事务管理)应该附加到代码的哪些位置。文档主要介绍了切入点表达式的不同类型: 1. 方法切入点表达式:使用`execution()`定义匹配的方法,星号`*`代表任意返回值和方法名,`(..)`表示任意参数。 2. 类切入点:指定特定类以应用额外功能,可以精确到类中的所有方法,或者只包含特定包的类。 3. 包切入点表达式:适用于整个包或包及其子包内的所有类和方法。
|
1天前
|
Java uml Spring
手写spring第四章-完善bean实例化,自动填充成员属性
手写spring第四章-完善bean实例化,自动填充成员属性
8 0
|
2天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
3天前
|
Java Spring 容器
Spring注入
Spring注入
24 13
|
9天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
15天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
23 1
|
1月前
|
Java 数据库连接 Spring
Spring5深入浅出篇:Spring配置⽂件参数化
该文档介绍了Spring配置文件参数化的概念和步骤。目的是将经常需要修改的配置,如数据库连接参数,从主配置文件中分离到一个单独的`.properties`文件,以便于管理和维护。步骤包括创建小型配置文件(如`db.properties`),在`applicationContext.xml`中引入该文件,并使用`${key}`语法在Spring配置文件中引用这些参数。最终通过测试验证配置文件参数化的成功。
|
1月前
|
Java Spring
使用spring实现邮件的发送(含测试,源码,注释)
使用spring实现邮件的发送(含测试,源码,注释)
7 0
|
XML IDE Java
Spring认证-Spring注入集合
您已经了解了如何使用值属性配置原始数据类型,并使用 Bean 配置文件中的<属性>标记的参考属性配置对象引用。这两种情况都涉及将值传递给 bean。
Spring认证-Spring注入集合