Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)

简介: 这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。

1、自动装配

什么是自动装配? 根据指定装配规则(属性名称或者属性类型),Spring 自动将匹配的属性值进行注入。 bean 标签属性 autowire,配置自动装配
autowire 属性常用两个值:byNamebyType

1.1 手动装配

在xml文件中、手动引入属性值。

    <bean id="emp" class="com.zyz.spring5.autowise.Emp">
        <property name="dept" ref="dept"></property>
    </bean>

    <bean id="dept" class="com.zyz.spring5.autowise.Dept"/>

1.2 根据byName

byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样。

 <bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byName"/>
 <bean id="dept" class="com.zyz.spring5.autowise.Dept"/>

在这里插入图片描述

1.2 根据byType

byType 根据属性类型注入。注意:注入值bean的id值和类属性名称可以不一样,如果有两个bean、会报错、不知道匹配哪个。

在这里插入图片描述

名称一致

  <bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byType"/>
    <bean id="dept" class="com.zyz.spring5.autowise.Dept"/>

名称不一致

 <bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byType"/>
  <bean id="mydept" class="com.zyz.spring5.autowise.Dept"/>
  • 如果有两个相同类型的bean、此时根据byType会报如下错误
    在这里插入图片描述

2、代码

2.1 Emp.java

员工类、员工属于哪个部门。部门作为员工类的一个属性

package com.zyz.spring5.autowise;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/10/13 22:18
 */
public class Emp {
    private Dept dept;

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "dept=" + dept +
                '}';
    }
    public void test(){
        System.out.println(dept);
    }
}

2.2 Dept.java

package com.zyz.spring5.autowise;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/10/13 22:18
 */
public class Dept {
    @Override
    public String toString() {
        return "Dept{}";
    }
}

2.3 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="emp" class="com.zyz.spring5.autowise.Emp">
        <property name="dept" ref="dept"></property>
    </bean>

    <bean id="dept" class="com.zyz.spring5.autowise.Dept"/>
    -->

    <!--
    bean 标签属性 autowire,配置自动装配
    autowire 属性常用两个值:
    byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样
    -->
    <!--
    <bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byName"/>
    <bean id="dept" class="com.zyz.spring5.autowise.Dept"/>
    -->

    <!--
    byType 根据属性类型注入。注意:注入值bean的id值和类属性名称可以不一样,如果有两个bean、会报错、不知道匹配哪个
    -->
    <bean id="emp" class="com.zyz.spring5.autowise.Emp" autowire="byType"/>
    <bean id="mydept" class="com.zyz.spring5.autowise.Dept"/>




</beans>

2.4 测试

    @Test
    public void testSpringDemo5(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean5.xml");
        Emp emp = context.getBean("emp", Emp.class);
        System.out.println(emp);
        emp.test();

    }

2.5 测试结果

在这里插入图片描述

相关文章
|
10月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
861 52
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
缓存 监控 前端开发
告别卡顿!3大前端性能优化魔法 + CSS容器查询实战
告别卡顿!3大前端性能优化魔法 + CSS容器查询实战
373 95
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
1087 26
|
10月前
|
安全 Java 决策智能
Spring Boot自动装配
Spring Boot自动装配基于“约定优于配置”理念,通过条件化配置与Starters机制,智能推断并加载所需组件,大幅简化开发流程。它实现配置自动化,提升效率,降低维护成本,支持自定义扩展,推动微服务快速构建,是Java生态中开发范式的革新之作。(238字)
|
10月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
10月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
803 2
|
Ubuntu Linux Docker
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
350 27
|
XML Java 数据格式
【SpringFramework】Spring IoC-基于XML的实现
本文主要讲解SpringFramework中IoC和DI相关概念,及基于XML的实现方式。
397 69