Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)

简介: 这篇文章详细介绍了Spring框架中IOC容器的Bean管理,特别是基于XML配置方式的实现。文章涵盖了Bean的定义、属性注入、使用set方法和构造函数注入,以及如何注入不同类型的属性,包括null值、特殊字符和外部bean。此外,还探讨了内部bean的概念及其与外部bean的比较,并提供了相应的示例代码和测试结果。

在XML文件中进行配置、对象的创建呀、属性的赋值呀…全部在XML配置文件中配置。更像是配置开发

1、什么是 Bean 管理

Bean 管理指的是两个操作

  • Spring 创建对象
  • Spirng 注入属性

2、Bean 管理操作有两种方式

  • 1、基于 xml 配置文件方式实现
  • 2、基于注解方式实现

3、基于XML方式实现

3.1 创建对象

在这里插入图片描述
(1)在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
(2)在 bean 标签有很多属性,介绍常用的属性

  • id 属性:唯一标识
  • class 属性:类全路径(包类路径)

(3)创建对象时候,默认也是执行无参数构造方法完成对象创建

在这里插入图片描述

3.2 注入属性

DI:依赖注入,就是注入属性

3.2.1 第一种注入方式:使用set方法进行注入

  • 1、创建类,在类中定义属性和对应的set方法
  • 2、在 spring 配置文件配置对象创建,配置属性注入

友情提示:使用set方式进行属性的注入、需要在类中、手动填写setXXX。如果使用lombok生成的setXXX、似乎不可以
在这里插入图片描述

定义Dog类

package com.zyz.spring5;

/**
 * @author 静小文
 * @version 1.0
 * @data 2022/9/21 23:02
 */
public class Dog {
    /**
     * 创建属性
     */
    private String name;
    private String kind;

    /**
     * 创建对应的set方法
     */
    public void setName(String name){
        this.name = name;
    }

    public void setKind(String kind){
        this.kind = kind;
    }

    public void testDog(){
        System.out.println("小狗的品种是:"+ this.kind+",小狗的名字是:"+this.name);
    }
}

编写配置文件

   <!--    set方法注入属性-->
    <bean id="dog" class="com.zyz.spring5.Dog">
        <!--使用 property 完成属性注入
            name:类里面属性名称
            value:向属性注入的值
         -->
        <property name="kind" value="哈巴狗"/>
        <property name="name" value="旺财"/>
    </bean>

测试结果

在这里插入图片描述

3.2.2 第二种注入方式:使用过有参构造函数进行注入

  • 1、创建类,定义属性,创建属性对应有参数构造方法
  • 2、在 spring 配置文件中进行配置

在这里插入图片描述
Cat类

package com.zyz.spring5;

/**
 * @author 静小文
 * @version 1.0
 * @data 2022/9/21 23:19
 */
public class Cat {
    /**
     * 创建属性
     */
    private String name;
    private String kind;

    /**
     * 有参构造函数
     * @param name
     * @param kind
     */
    public Cat(String name,String kind){
        this.kind = kind;
        this.name = name;
    }

    public void testCat(){
        System.out.println("小猫的品种是:"+ this.kind+",小猫的名字是:"+this.name);
    }
}

配置文件

    <!--    有参函数构造属性-->
    <bean id="cat" class="com.zyz.spring5.Cat">
        <!--使用 property 完成属性注入
             name:类里面属性名称
             value:向属性注入的值
        -->
        <constructor-arg name="kind" value="波斯猫"/>
        <constructor-arg name="name" value="招财猫"/>
    </bean>

测试结果

在这里插入图片描述


3.3 注入其他类型属性

3.3.1 注入null值(字面量)

在这里插入图片描述
不写value值、直接写null
在这里插入图片描述

测试结果
在这里插入图片描述

3.3.2 属性值包含特殊符号

在这里插入图片描述
测试结果
在这里插入图片描述


如果特殊字符不进行转义、会报错哦
在这里插入图片描述

3.3.3 注入属性、外部bean(其他对象作为该类的属性)

1、创建一个接口CatDao、该接口的实现类:CatDaoImpl
2、创建一个类CatService、在该类中调用CatDao接口中的方法
3、在xml配置文件中进行配置

CatDao

package com.zyz.spring5.dao;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/9/25 15:38
 */
public interface CatDao {
    public void say();
}

CatDaoImpl

package com.zyz.spring5.dao;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/9/25 15:41
 */
public class CatDaoImpl implements CatDao{
    @Override
    public void say() {
        System.out.println("CatDaoSay........");
    }
}

CatService

package com.zyz.spring5.service;

import com.zyz.spring5.dao.CatDao;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/9/25 15:42
 */
public class CatService {
    private CatDao catDao;

    public void setCatDao(CatDao catDao){
        this.catDao = catDao;
    }

    public void say(){
        System.out.println("CatServiceSay........");
        catDao.say();
    }



}

xml配置文件

   <bean id="catservice" class="com.zyz.spring5.service.CatService">
        <!--注入 CatDao 对象
            name 属性:类里面属性名称
            ref 属性:创建 userDao 对象 bean 标签 id 值
         -->
        <property name="catDao" ref="catdaoimpl"/>
    </bean>

    <bean id="catdaoimpl" class="com.zyz.spring5.dao.CatDaoImpl"></bean>

在这里插入图片描述

测试结果
在这里插入图片描述


3.3.4 注入属性、内部bean

比如:一对多关系。一个部门有多个员工。这里的一是部门、多是员工。可以将部门作为一个员工的属性(员工隶属于哪个部门)

部门类:Department

package com.zyz.spring5.dao;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/9/25 16:34
 */
public class Department {
    private String dname;

    public void setDname(String dname){
        this.dname = dname;
    }

    @Override
    public String toString() {
        return "Department{" +
                "dname='" + dname + '\'' +
                '}';
    }
}

员工类:Employee

package com.zyz.spring5.dao;

/**
 * @author Lenovo
 * @version 1.0
 * @data 2022/9/25 16:35
 */
public class Employee {
    private String ename;
    private String gender;
    /**
     * 所属部门
     */
    private Department department;

    public void setEname(String ename){
        this.ename = ename;
    }

    public void setGender(String gender){
        this.gender = gender;
    }


    public void setDepartment(Department department){
        this.department = department;
    }

    public void  say(){
        System.out.println("我的部门是:"+department+"  姓名:"+this.ename+"   性别:"+this.gender);
    }
}

编写的配置类

<?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.zyz.spring5.dao.Employee">
        <property name="ename" value="张三"/>
        <property name="gender" value="男"/>

        <property name="department">
            <bean id="department" class="com.zyz.spring5.dao.Department">
                <property name="dname" value="开发部门"/>
            </bean>
        </property>
    </bean>

</beans>

在这里插入图片描述

测试结果
在这里插入图片描述

内部bean可以改为外部bean(外部bean叫容易维护)

在这里插入图片描述
测试结果
在这里插入图片描述


相关文章
|
16天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes 入门指南:快速上手容器编排
【8月更文第29天】Kubernetes(简称 K8s)是一个开源平台,用于自动化容器化应用程序的部署、扩展和管理。它提供了一种便捷的方式来部署和运行应用程序,而无需关心底层基础设施的细节。本指南将带你从零开始学习 Kubernetes 的基础知识,并帮助你部署第一个应用。
81 0
|
12天前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
50 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
1天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
1天前
|
Java 数据库连接 Maven
Spring基础1——Spring(配置开发版),IOC和DI
spring介绍、入门案例、控制反转IOC、IOC容器、Bean、依赖注入DI
Spring基础1——Spring(配置开发版),IOC和DI
|
15天前
|
存储 Kubernetes Cloud Native
探索Python编程的奥秘云原生时代的容器编排:Kubernetes入门与实践
【8月更文挑战第30天】本文以浅显易懂的方式,探讨了Python编程的核心概念和技巧。从基础语法到高级特性,再到实际应用案例,逐步引导读者深入理解Python编程的精髓。通过本文的学习,读者将能够掌握Python编程的基本技能,并激发进一步探索的兴趣。
27 13
|
15天前
|
Cloud Native 持续交付 Docker
云原生入门指南:构建你的首个容器化应用
【8月更文挑战第30天】云原生技术,作为现代软件开发的风向标,正在改变我们构建、部署和管理应用程序的方式。本篇文章将引导你了解云原生的核心概念,并通过一个简单的代码示例,展示如何将传统应用转变为容器化的云原生应用。无论你是新手开发者还是希望扩展知识的IT专业人士,这篇文章都将是你探索云原生世界的起点。
|
14天前
|
运维 开发者 Docker
Docker容器部署实战:从入门到精通
【8月更文挑战第31天】 本文将引导读者了解如何使用Docker容器技术来简化和加速应用程序的部署过程。文章将通过实际案例探讨Docker的基本概念、架构,以及如何创建、管理和维护Docker容器。我们将通过详细的代码示例和操作指导,展示如何在本地环境或云基础设施上部署应用,并讨论如何克服在实际部署中可能遇到的挑战。无论你是DevOps工程师、软件开发者还是IT专业学生,本文都将为你提供深入理解并有效使用Docker的全面指南。
|
14天前
|
缓存 Java Spring
Spring缓存实践指南:从入门到精通的全方位攻略!
【8月更文挑战第31天】在现代Web应用开发中,性能优化至关重要。Spring框架提供的缓存机制可以帮助开发者轻松实现数据缓存,提升应用响应速度并减少服务器负载。通过简单的配置和注解,如`@Cacheable`、`@CachePut`和`@CacheEvict`,可以将缓存功能无缝集成到Spring应用中。例如,在配置文件中启用缓存支持并通过`@Cacheable`注解标记方法即可实现缓存。此外,合理设计缓存策略也很重要,需考虑数据变动频率及缓存大小等因素。总之,Spring缓存机制为提升应用性能提供了一种简便快捷的方式。
25 0
|
14天前
|
Kubernetes Cloud Native Docker
云原生入门:Docker容器化部署实战
【8月更文挑战第31天】在数字化浪潮中,云原生技术成为企业转型的助推器。本文通过Docker容器化部署的实践案例,引导读者从零基础到掌握基础的云原生应用部署技能。我们将一起探索Docker的魅力,学习如何将一个应用容器化,并在云平台上运行起来,为深入云原生世界打下坚实基础。
|
15天前
|
运维 Kubernetes Cloud Native
云原生技术入门:从容器到Kubernetes的探索之旅
【8月更文挑战第30天】在数字时代的浪潮中,云计算已成为推动创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭开云原生技术的神秘面纱,从容器化技术的基础出发,逐步深入到Kubernetes集群管理的实际应用。我们将一起见证代码如何转化为可在云端无缝运行的服务,体验技术变革带来的无限可能。