【Spring】01 Bean 介绍

news2024/11/15 9:12:02

文章目录

      • 1. 定义
      • 2. 特性
        • 1)可重用性
        • 2)可配置性
        • 3)可管理性
      • 3. 生命周期
        • 1)实例化
        • 2)属性设置
        • 3)初始化
        • 4)使用
        • 5)销毁
      • 4. 配置方式
        • 1)XML配置
        • 2)注解配置
        • 3) Java 配置
      • 5. 作用域
      • 6. 依赖注入
        • 1)构造函数注入
        • 2)Setter方法注入
        • 3)接口注入
      • 结语

对于 Spring 框架而言,一切 Java 对象皆是 Bean。

在 Java 开发中,Spring 框架是一个广泛使用的轻量级、全面的应用开发框架。而在 Spring 的世界里,Bean 是一个核心概念,贯穿了整个应用的构建和管理。

1. 定义

在 Spring 框架中,Bean 是指由 Spring IoC 容器管理的对象。它可以是 Java 类的实例,也可以是一些由 Spring 提供的特殊对象。Bean 由 IoC 容器实例化、组装和管理,使得应用的开发者可以专注于业务逻辑而不必关心对象的创建和管理

2. 特性

Bean 的特性有很多,下面我们主要从三个方面去说明一下。

在这里插入图片描述

1)可重用性

Bean 是可重用的组件,可以在应用的不同部分或者不同应用中被引用。这种重用性大大简化了代码的开发和维护。

2)可配置性

通过 IoC 容器,我们可以对 Bean 进行配置,包括属性注入、依赖注入等。这使得 Bean 的行为可以在不修改源代码的情况下进行调整。

3)可管理性

IoC 容器负责 Bean 的生命周期管理,包括实例化、初始化、使用和销毁。这简化了对象的生命周期管理,避免了手动进行繁琐的对象创建和销毁工作。

3. 生命周期

在这里插入图片描述

1)实例化

在实例化阶段,IoC 容器负责创建 Bean 的实例。这通常涉及到调用 Bean 的构造函数。

2)属性设置

在实例化后,IoC 容器会注入 Bean 的属性。这包括基本数据类型、其他 Bean 引用等。

3)初始化

在属性设置后,IoC 容器会调用 Bean 的初始化方法。开发者可以通过配置指定初始化方法,也可以通过实现InitializingBean 接口来定义初始化逻辑。

4)使用

在初始化后,Bean 进入使用阶段。在这个阶段,Bean 被注入到其他对象中,参与应用的业务逻辑。

5)销毁

在应用关闭或者需要释放资源时,IoC 容器会负责调用 Bean 的销毁方法。开发者可以通过配置指定销毁方法,也可以通过实现 DisposableBean 接口来定义销毁逻辑。

4. 配置方式

1)XML配置

在 XML 配置文件中,我们可以使用 元素定义 Bean 的配置信息,包括类名、属性值、依赖关系等。

上一节 【Spring】00 入门指南 中,我们使用的就是这一种方式

<bean id="springDemo" class="org.example.cheney.SpringDemo">
</bean>
2)注解配置

通过在 Java 类上使用注解(如:@Component),我们可以将一个普通的 Java 类声明为一个 Bean。这种方式更加简洁,提高了代码的可读性。

@Component
public class SpringDemo {
    public void hello() {
        System.out.println("Hello World");
    }
}
3) Java 配置

除了 XML 和注解配置外,Spring 还支持通过 Java 类进行配置(@Configuration + @Bean)。通过 Java 配置类,我们可以以编程的方式定义Bean 及其依赖关系。

@Configuration
public class AppConfig {
    @Bean
    public SpringDemo springDemo() {
        return new SpringDemo();
    }
}

5. 作用域

Bean 的作用域定义了 Bean 在 IoC 容器中的生命周期和可见范围。Spring 支持以下几种常见的作用域:

在这里插入图片描述

  • singleton(默认): 在容器中仅存在一个实例,所有对该 Bean 的请求都返回同一个实例
  • prototype: 每次请求都会创建一个新的实例,适用于状态无关的 Bean
  • request: 每次 HTTP 请求都会创建一个新的实例,仅在 Web 应用中有效
  • session: 每个 HTTP Session 都会创建一个新的实例,同样仅在 Web 应用中有效

6. 依赖注入

Bean 之间的依赖关系可以通过依赖注入来实现,包括构造函数注入、Setter方法注入、接口注入等。这种方式降低了对象之间的耦合度,使得系统更加灵活和可维护。

例如:

我们想向 SpringDemo 类 注入了一个 TestService 的类

1)构造函数注入

通过构造函数向 Bean 注入依赖。

public class SpringDemo {
    private final TestService testService;

    public SpringDemo(TestService testService) {
        this.testService = testService;
    }
}
2)Setter方法注入

通过 Setter 方法向 Bean 注入依赖。

public class SpringDemo {
    private TestService testService;

    public void setTestService(TestService testService) {
        this.testService = testService;
    }
}
3)接口注入

通过实现特定接口来获取依赖。

public class SpringDemo implements ApplicationContextAware {
    private TestService testService;

    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        this.testService = context.getBean(TestService.class);
    }
}

结语

我们知道对于 Spring 框架而言,一切 Java 对象皆是 Bean。这里我们讲解了 Spring 中的 Bean 概念、特性、生命周期、配置方式、作用域以及依赖注入。Bean 作为 Spring 框架的核心,不仅提供了组件化和可维护性,还通过IoC 容器实现了对象的自动化管理,因此我们应该好好去理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3DMax物理画笔物体填充放置绘制画笔插件安装使用方法

3DMax物理画笔物体填充放置绘制画笔插件&#xff0c;允许您使用笔刷以非常自然的方式用物品快速填充场景&#xff0c;并使用刚体模拟自动放置它们。 无论你是从事建筑、游戏电影还是商业。。。等等&#xff0c;你经常需要用一些物品为你的场景添加细节。手工放置它们是乏味的&…

大数据技术10:Flink从入门到精通

导语&#xff1a;前期入门Flink时&#xff0c;可以直接编写通过idea编写Flink程序&#xff0c;然后直接运行main方法&#xff0c;无需搭建环境。我碰到许多初次接触Flink的同学&#xff0c;被各种环境搭建、提交作业、复杂概念给劝退了。前期最好的入门方式就是直接上手写代码&…

【ET8框架入门】2.ET框架解析

菜单栏相关&#xff1a;ENABLE_DLL选项 ET->ChangeDefine->ADD_ENABLE_DLL/REMOVE_ENABLE_DLL 一般在开发阶段使用Editor时需要关闭ENABLE_DLL选项。该选项关闭时&#xff0c;修改脚本之后&#xff0c;会直接重新编译所有的代码&#xff0c;Editor在运行时会直接使用最…

学习pytorch18 pytorch完整的模型训练流程

pytorch完整的模型训练流程 1. 流程1. 整理训练数据 使用CIFAR10数据集2. 搭建网络结构3. 构建损失函数4. 使用优化器5. 训练模型6. 测试数据 计算模型预测正确率7. 保存模型 2. 代码1. model.py2. train.py 3. 结果tensorboard结果以下图片 颜色较浅的线是真实计算的值&#x…

DHCP--自动获取IP地址

目录 一、了解DHCP服务 1、概念 2、使用DHCP的好处 3、DHCP的分配方式 二、DHCP的租约过程 1、客户机请求IP地址 2、服务器响应 3、客户机选择IP地址 4、服务器确定租约 5、服务器租约期限到了之后续期问题 6、总结 三、部署DHCP实验 1、项目要求 2、规划设计 …

云计算与AI融合:Amazon Connect开创客户服务智能时代

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 在亚马逊云科技 re:Invent 2023 大会上&#xff0c;Amazon Connect…

数组相关的题目

数组相关的题目 128. 最长连续序列 128. 最长连续序列 题目&#xff1a;给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 很容易就能想到要先排序&#xff0c;再进行后续的处理。有一个坑&a…

CentOS7安装 Docker Compose

docker系列 CentOS7安装 Docker Compose docker系列前言1、下载 Docker Compose2、 授权执行权限3、添加软链接4、验证安装 前言 下面的操作是在centos7中完成的。这里安装的是2.23.3版本的docker-compose。 1、下载 Docker Compose 确保你具有 curl 工具&#xff0c;然后使用…

低代码开发:属于“美味膳食”还是“垃圾食品”

目录 引言低代码是什么&#xff1f;低代码的优点使用挑战未来展望最后 引言 随着数字化转型的迅猛发展&#xff0c;低代码开发平台逐渐成为了企业和开发者的关注焦点&#xff0c;尤其是前两年低代码的迅速火爆&#xff0c;来势汹汹&#xff0c;号称要让大部分程序员下岗的功能…

海外中企项目概设方案

目录 一、项目背景 二、业务需求 2.1 远程视频监控 2.2 多级视频指挥 2.3 无线集群通信 2.4 车辆实时跟踪 2.5 车辆视频调度 三、需求分析 3.1 总指挥中心-标段分指挥中心x 3.2 标段分指挥中心x-指挥车x - 语音/定位业务&#xff1a; 3.3 标段x-指挥车x-视频业务&am…

There appears to be trouble with your network connection. Retrying

一直在报如上错误&#xff0c;试了很多办法&#xff0c;比如删掉yarn.lock&#xff0c;yarn cache clean&#xff0c;删掉node_modules&#xff0c;rm proxy等等都没有用 甚至于重启电脑&#xff0c;然而并没有什么用 突然间想到&#xff0c;我用了clash for window 所以想了…

uniapp开发项目注意事项

uniapp创建项目用HBuilderX创建或者用脚手架命令创建都可以vue文件渲染h5&#xff0c;小程序很好nvue文件渲染原生app更好&#xff0c;注意nvue文件css的一些局限性&#xff0c;简称坑死人nvue所支持的通用样式已在本文档中全部列出&#xff0c;一些组件可能有自定义样式&#…

js点击按钮上传文件

vue语法 <template><div style"width: 152px;"><input id"file" ref"file" class"filepath" change"changepic()" type"file" /><el-button size"small" type"primary&quo…

Docker | 发布镜像到镜像仓库

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Docker系列 ✨特色专栏: MySQL学习 🥭本文内容:Docker | 发布镜像到镜像仓库 📚个人知识库: [Leo知识库]https://gaoziman.gitee.io/bl…

操作系统笔记——概论、进程、线程(王道408)

文章目录 前言计算机系统概述OS的基本概念OS的发展历程OS的运行机制OS体系结构OS引导虚拟机 进程和线程进程和线程基础进程进程状态进程控制进程通信线程线程实现 CPU调度调度的层次进程调度细节调度算法评价指标批处理调度算法交互式调度方法 同步与互斥基本概念互斥互斥软件实…

2023.12.6 关于 Spring Boot 事务的基本概念

目录 事务基本概念 前置准备 Spring Boot 事务使用 编程式事务 声明式事务 Transactional 注解参数说明 Transational 对异常的处理 解决方案一 解决方案二 Transactional 的工作原理 面试题 Spring Boot 事务失效的场景有那些&#xff1f; 事务基本概念 事务指一…

10.CSS浮动

CSS浮动 1.介绍 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一 2.作用 让元素脱离标准流&#xff0c;同一级的浮动的元素可以并排在一排显示 3.元素浮动后的特点 脱离文档流不管浮动前是什么元素&#xff0c;浮动后&…

【为什么POI的SXSSFWorkbook占用内存更小?】

&#x1f513;为什么POI的SXSSFWorkbook占用内存更小&#xff1f; &#x1f3c6;POI的SXSSFWorkbook&#x1f3c6;POI的SXSSFWorkbook占用内存&#x1f3c6;扩展配置行缓存限制 &#x1f3c6;POI的SXSSFWorkbook SXSSFWorkbook类是Apache POI库的一部分&#xff0c;它是一个流…

产品入门第二讲:Axure产品元件库的使用

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是…

python下使用Open3D

1.切记不要安装最新的python否则无法使用open3D &#xff0c;官网显示只支持python3.8-3.11 这是我安装的python版本 2.由于访问github很慢&#xff0c;所以我手动下载ply文件 https://github.com/isl-org/open3d_downloads/releases/download/20220201-data/fragment.ply 3…