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叫容易维护)

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


相关文章
|
4月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
4月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
4月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
561 2
|
9月前
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
3227 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
8月前
|
XML 人工智能 Java
Spring IOC 到底是什么?
IOC(控制反转)是一种设计思想,主要用于解耦代码,简化依赖管理。其核心是将对象的创建和管理交给容器处理,而非由程序直接硬编码实现。通过IOC,开发者无需手动new对象,而是由框架负责实例化、装配和管理依赖对象。常见应用如Spring框架中的BeanFactory和ApplicationContext,它们实现了依赖注入和动态管理功能,提升了代码的灵活性与可维护性。
222 1
|
7月前
|
前端开发 Java API
基于 Spring Boot 3 与 React 的 Java 学生信息管理系统从入门到精通实操指南
本项目基于Spring Boot 3与React 18构建学生信息管理系统,涵盖前后端开发、容器化部署及测试监控,提供完整实操指南与源码,助你掌握Java全栈开发技能。
354 0
|
8月前
|
Java 关系型数据库 MySQL
【Spring】【事务】初学者直呼学会了的Spring事务入门
本文深入解析了Spring事务的核心概念与使用方法。Spring事务是一种数据库事务管理机制,通过确保操作的原子性、一致性、隔离性和持久性(ACID),维护数据完整性。文章详细讲解了声明式事务(@Transactional注解)和编程式事务(TransactionTemplate、PlatformTransactionManager)的区别与用法,并探讨了事务传播行为(如REQUIRED、REQUIRES_NEW等)及隔离级别(如READ_COMMITTED、REPEATABLE_READ)。
629 1
|
9月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
8月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
970 0

热门文章

最新文章