文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

详解Spring Bean的集合注入和自动装配

2024-04-02 19:55

关注

一、Spring Bean 集合注入

在【Spring学习笔记(三)】已经讲了怎么注入基本数据类型和引用数据类型,接下来介绍如何注入比较特殊的数据类型——集合

集合常用标签

集合注入,用法也很简单,只需要在 Bean 标签下的 <property><constructor-arg>元素中添加以下集合的标签,再通过value或者ref进行属性注入

标签说明
<list>用于注入 list 集合,允许重复
<set>用于注入 set集合,不允许重复
<map>用于注入 key-value 的map集合, key 和 value 可以是任意类型
<props>用于注入 key-value 的properties集合,key 和 value 必须是是字符串类型

注意: List的底层也是通过数组实现的,所以<list><array>标签是可以混用

案例

1.创建一个Collection类和Dept类,代码如下


public class Collection {
    //1.数组
    private int[] array;
    //2.list集合
    private List<Dept> list;
    //3。set集合
    private Set<Dept> set;
    //4.map集合
    private Map<String, String> map;
    //5.properties集合
    private Properties properties;
    //打印各个集合
    public void fmt() {
        System.out.println("打印array:" + Arrays.toString(array));
        System.out.println("打印List:" + list);
        System.out.println("打印Set:" + set);
        System.out.println("打印Map:" + map);
        System.out.println("打印Properties:" + properties);
    }
    -----省略setter方法-----    
}

public class Dept {
    //部门编号
    private int deptNo;
    //部门名称
    private String deptName;
    @Override
    public String toString() {
        return "Dept{" +
            "deptNo=" + deptNo +
            ", deptName='" + deptName + '\'' +
            '}';
    }
    -----省略setter方法----- 
}

2.编写spring配置文件

<!--部门类属性注入-->
<bean id="dept" class="com.bighorn.pojo.Dept">
    <property name="deptNo" value="1"/>
    <property name="deptName" value="后端组"/>
</bean>

<!--Collection类属性注入-->
<bean id="collection" class="com.bighorn.pojo.Collection">
    <!--数组类型-->
    <property name="array">
        <array>
            <value>114514</value>
            <value>114514</value>
            <value>114514</value>
        </array>
    </property>
    <!--List 类型-->
    <property name="list">
        <list>
            <ref bean="dept"/>
            <ref bean="dept"/>
            <ref bean="dept"/>
        </list>
    </property>
    <!--Set 类型-->
    <property name="set">
        <set>
            <ref bean="dept"/>
            <ref bean="dept"/>
            <ref bean="dept"/>
        </set>
    </property>
    <!--Map 类型-->
    <property name="map">
        <map>
            <entry key="name" value="bighorn"/>
            <entry key="age" value="18"/>
            <entry key="sex" value="man"/>
        </map>
    </property>
    <!--Properties 类型-->
    <property name="properties">
        <props>
            <prop key="username">root</prop>
            <prop key="password">123456</prop>
        </props>
    </property>
</bean>

3.编写运行程序

public static void main(String[] args) {
    //获取IoC容器
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //从容器中获取对象
    Collection collection = context.getBean("collection", Collection.class);
    //调用方法打印各个集合
    collection.fmt();
}

运行结果如下

二、Spring Bean自动装配

Spring 在 Bean 与 Bean 之间建立依赖关系的行为称为 “装配”

Spring Bean 属性注入 前面学习了,在 spring配置文件中通过 <constructor-arg><property> 中的 ref 属性,手动维护 Bean 与 Bean 之间的依赖关系的,即手动装配

手动装配图

什么是自动装配

如果容器中Bean很多,依赖关系又非常复杂,此时手动装配就略显吃力且繁琐了,所以Spring 框架为我们提供了 “自动装配” 功能,提高开发效率。

Spring 自动装配:Spring IoC容器根据自动装配方式,为指定的 Bean 从应用上下文(AppplicationContext 容器)自动查找并自动注入它所依赖的 Bean。

自动装配的方式

Spring 默认不支持自动装配的。使用自动装配,则需要对 Spring XML 配置文件中 <bean> 元素的 autowire 属性进行设置,此时就不需要ref属性了。

属性值说明
byName按名称自动装配。 Bean 的 id 或 name 属性值与这个对象属性的名称相同
byType按类型自动装配。 Bean 的 class 属性值与这个对象属性的类型相匹配
constructor按构造器参数自动装配。
default默认采用上一级元素 <beans> 设置的自动装配方式(default-autowire)进行装配。
no默认值,表示不使用自动装配。

案例

1.创建员工类Employee和部门类Dept,添加各个成员变量的setter方法


public class Employee {
    //员工编号
    private String empNo;
    //员工姓名
    private String empName;
    //部门信息
    private Dept dept;
    //各个属性的setter方法
    public void setEmpNo(int empNo) {
        this.empNo = empNo;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }
    public void setDept(Dept dept) {
        this.dept = dept;
    }
    ----省略toString方法------  
}


public class Dept {
    //部门编号
    private String deptNo;
    //部门名称
    private String deptName;
    //各个属性的setter方法
    public void setDeptNo(int deptNo) {
        this.deptNo = deptNo;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
    ----省略toString方法------
}

2.编写spring配置文件

<!--部门类属性注入-->
<bean id="dept" class="com.bighorn.pojo.Dept">
    <property name="deptNo" value="2"/>
    <property name="deptName" value="前端组"/>
</bean>
<!--员工类属性注入-->
<bean id="employee" class="com.bighorn.pojo.Employee" autowire="byType">
    <property name="empNo" value="114514"/>
    <property name="empName" value="lzh"/>
</bean>

3.编写运行程序

public static void main(String[] args) {
    //获取IoC容器
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //从容器中获取对象
    Employee employee = context.getBean("employee", Employee.class);
    System.out.println(employee);
}

结果如下图

注意点

以上就是详解Spring Bean的集合注入和自动装配的详细内容,更多关于Spring Bean集合注入 自动装配的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯