spring IOC容器的Bean管理XML自动装配过程


Posted in Java/Android onMay 30, 2022

什么是自动装配?

在之前的内容中,每给属性注入值都要一个个的用 property 标签来完成,比如:

<bean id="book" class="com.pingguo.spring5.collectiontype.Book" scope="prototype">
        <property name="list" ref="bookList"></property>
    </bean>

这就是手动装配。

而自动装配中,spring 会根据指定装配规则(属性名称或者属性类型) 来自动的将匹配的属性值进行注入。

自动装配过程

1. 创建 2 个类

分别是部门类 Department 和员工类 Employee 。

package com.pingguo.spring5.autowire;
public class Department {
    @Override
    public String toString() {
        return "Department{}";
    }
}

员工类有个 部门的属性,表示员工所属的一个部门。其他方法是为了后续方便演示输出。

package com.pingguo.spring5.autowire;
public class Employee {
    private Department department;
    public void setDepartment(Department department) {
        this.department = department;
    }
    @Override
    public String toString() {
        return "Employee{" +
                "department=" + department +
                '}';
    }
    public void test() {
        System.out.println(department);
    }
}

2. 配置文件

<?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="employee" class="com.pingguo.spring5.autowire.Employee">
        <property name="department" ref="department"></property>
    </bean>
    <bean id="department" class="com.pingguo.spring5.autowire.Department"></bean>
</beans>

3. 测试方法

@Test
    public void test5() {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean5.xml");
        Employee employee = context.getBean("employee", Employee.class);
        System.out.println(employee);
    }

运行结果:

Employee{department=Department{}}
Process finished with exit code 0

ok,到这里,其实就是手动装配的过程。

实现自动装配,在配置文件里,通过 bean 标签里的属性 autowire 来配置:

  • autowire="byName":根据属性名称自动注入。
  • autowire="byType":根据属性类型自动注入。

1)byName 演示

注入值的bean的 id 值和类属性名称一致,比如:

spring IOC容器的Bean管理XML自动装配过程

修改配置文件,加上 autowire="byName",然后注释掉 property。

<bean id="employee" class="com.pingguo.spring5.autowire.Employee" autowire="byName">
        <!--<property name="department" ref="department"></property>-->
    </bean>
    <bean id="department" class="com.pingguo.spring5.autowire.Department"></bean>

执行测试函数:

Employee{department=Department{}}
Process finished with exit code 0

跟使用 property 手动装配结果一致。

2)byType 演示

要注入值的 bean 的类型与 属性里的一致,比如:

spring IOC容器的Bean管理XML自动装配过程

现在继续修改配置文件,加上 autowire="byType",然后注释掉 property。

<bean id="employee" class="com.pingguo.spring5.autowire.Employee" autowire="byType">
        <!--<property name="department" ref="department"></property>-->
    </bean>
    <bean id="department" class="com.pingguo.spring5.autowire.Department"></bean>

再次执行测试:

Employee{department=Department{}}
Process finished with exit code 0

跟使用 property 手动装配结果一致。

不过,用 xml 方式使用自动装配实际中是很少的,一般是以注解的方式,后续会学习到。

以上就是spring IOC容器的Bean管理XML自动装配过程的详细内容!


Tags in this post...

Java/Android 相关文章推荐
SpringCloud Alibaba 基本开发框架搭建过程
Jun 13 Java/Android
浅析NIO系列之TCP
Jun 15 Java/Android
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
Jul 01 Java/Android
Spring Boot 排除某个类加载注入IOC的操作
Aug 02 Java/Android
Java并发编程之原子性-Atomic的使用
Mar 16 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
Android 中的类文件和类加载器详情
Jun 05 Java/Android
Android开发手册Chip监听及ChipGroup监听
Jun 10 Java/Android
Android开发EditText禁止输入监听及InputFilter字符过滤
Jun 10 Java/Android
springboot实现string转json json里面带数组
Jun 16 Java/Android
Java Spring Boot请求方式与请求映射过程分析
Jun 25 Java/Android
JDK8中String的intern()方法实例详细解读
Sep 23 Java/Android
利用正则表达式匹配浮点型数据
May 30 #Java/Android
JavaScript正则表达式实现注册信息校验功能
May 30 #Java/Android
Java时间工具类Date的常用处理方法
May 25 #Java/Android
Java实现扫雷游戏详细代码讲解
多线程Spring通过@Scheduled实现定时任务
May 25 #Java/Android
SpringBoot全局异常处理方案分享
May 25 #Java/Android
Java数据结构之堆(优先队列)
May 20 #Java/Android
You might like
菜鸟修复电子管记
2021/03/02 无线电
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php中变量及部分适用方法
2008/03/27 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
电大学习个人自我评价范文
2013/10/04 职场文书
英语专业毕业生自我鉴定
2013/11/09 职场文书
人事助理岗位职责
2013/11/18 职场文书
一月红领巾广播稿
2014/02/11 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
刑事上诉状范文
2015/05/22 职场文书
关于军训的感想
2015/08/07 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers