【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)
文章目录
- 🍔Bean的获取
- 🎄注入IOC容器对象
- ⭐代码实现
- 🛸根据bean的名称获取
- 🛸根据bean的类型获取
- 🛸根据bean的名称和类型获取
- 🎄Bean的作用域
- ⭐代码实现
- 🎈注意
- 🎄第三方Bean
- ⭐代码实现
- 🌺在启动类上进行配置(不建议)
- 🌺使用配置类进行配置
- 🍔总结

代码脚手架我上传到网盘里面了,有需要的同学请自取
我用夸克网盘分享了「springboot-web-config2.zip」,点击链接即可保存。 链接:https://pan.quark.cn/s/f3872e6654cf
🍔Bean的获取
在Spring框架中,Bean是指由Spring容器管理的对象。Spring容器可以通过不同的方式获取Bean,常用的方法有以下几种:
- 通过名称获取Bean:可以使用getBean方法通过Bean名称获取Bean。例如:MyBean myBean = (MyBean) context.getBean(“myBean”);
- 通过类型获取Bean:可以使用getBean方法通过Bean类型获取Bean。例如:MyBean myBean = context.getBean(MyBean.class);
- 通过名称和类型同时获取Bean:如果存在多个符合条件的Bean,可以使用带有名称和类型参数的getBean方法来获取Bean。例如:MyBean myBean = context.getBean(“myBean”, MyBean.class);
需要注意的是,Bean只有在Spring容器初始化时才会被创建,因此在获取Bean之前,必须确保Spring容器已经初始化完成。通常,在Web应用程序中,可以在Servlet容器启动时初始化Spring容器,以便在应用程序中随时获取Bean。
🎄注入IOC容器对象
在Spring框架中,Bean是由IOC容器来管理和创建的。因此,在获取Bean对象之前,需要先创建IOC容器对象,确保容器已经初始化完成,并且Bean已经被创建并添加到容器中。
具体来说,IOC容器是Spring框架的核心组件之一,它负责维护Bean的生命周期、依赖注入、AOP等功能。Spring框架提供了多种类型的IOC容器,包括BeanFactory、ApplicationContext等,每种容器都有不同的特点和使用方式。
通过创建IOC容器对象,可以让Spring框架自动扫描指定的配置文件或注解,并根据配置信息创建Bean对象。这些Bean对象可以通过IOC容器来管理,包括获取Bean实例、销毁Bean实例、依赖注入等。因此,在获取Bean对象之前,需要先创建IOC容器对象,确保容器已经初始化完成,并且Bean已经被创建并添加到容器中。
另外,通过IOC容器来获取Bean对象的好处在于,可以将Bean的创建和管理交给Spring框架来处理,减少了程序员的工作量,并提高了程序的可维护性和可扩展性。同时,IOC容器还能够管理Bean之间的依赖关系,实现松耦合的编程模式,提高了程序的灵活性和可测试性。
⭐代码实现
🛸根据bean的名称获取
DeptController bean1 = (DeptController) applicationContext.getBean("deptController");System.out.println(bean1);
🛸根据bean的类型获取
DeptController bean2 = applicationContext.getBean(DeptController.class);System.out.println(bean2);
🛸根据bean的名称和类型获取
DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);System.out.println(bean3);
@SpringBootTest
class SpringbootWebConfig2ApplicationTests {@Autowiredprivate ApplicationContext applicationContext;//获取bean对象@Testpublic void testGetBean() {//根据bean的名称获取DeptController bean1 = (DeptController) applicationContext.getBean("deptController");System.out.println(bean1);//根据bean的类型获取DeptController bean2 = applicationContext.getBean(DeptController.class);System.out.println(bean2);//根据bean的名称 及 类型获取DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);System.out.println(bean3);}
}
我们运行一下
🎄Bean的作用域
配置Bean的作用域需要加上下面这个注解
@Scope
⭐代码实现
运行后发现
我们调用10次getBean方法,得到了10个bean对象
🎈注意
- 默认singleton的bean,在容器启动的时候被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)
- prototype的bean,每一次使用该bean的时候都会创建一个新的实例
- 实际开发中,大多数Bean的单例的,也就是说大部分bean不需要配置scope属性
🎄第三方Bean
第三方 Bean 是指在软件开发中,由外部库或框架提供的可被集成到应用程序中的组件或对象。
在传统的 Java 开发中,通常使用 Spring Framework 进行应用程序的开发。Spring Framework 提供了一个 IoC(Inversion of Control)容器,负责管理应用程序中的对象(也称为 Bean)。开发者可以通过配置文件或注解的方式定义和注册自己的 Bean,然后由 Spring 容器进行实例化和管理。
除了自己定义的 Bean,还可以引入第三方库或框架提供的 Bean。这些第三方 Bean 可以是数据库连接池、消息队列、缓存库等各种组件。通过将这些第三方 Bean 集成到应用程序中,开发者可以直接使用这些功能强大的组件,而不需要从零开始编写相关的代码。
以 Spring Framework 为例,开发者可以通过 Maven 或 Gradle 等构建工具将第三方库的依赖添加到项目中,然后在 Spring 的配置文件或注解中声明并配置第三方 Bean。Spring 容器会负责实例化和管理这些第三方 Bean,使开发者能够轻松地在应用程序中使用它们。
总而言之,第三方 Bean 是指由外部库或框架提供的可被集成到应用程序中的组件或对象,通过集成这些第三方 Bean,开发者可以提高开发效率,复用优秀的功能组件。
⭐代码实现
🌺在启动类上进行配置(不建议)
我们在启动类上声明第三方bean
加上@Bean后,会将当前方法的返回值对象交给IOC容器管理
🌺使用配置类进行配置
这样子,spring容器在启动的时候,会自动调用声明为bean的方法,然后把方法的返回值声明为spring容器里面的bean对象注入到ioc容器中
下面我们创建一个配置类
运行成功
🍔总结
在项目中,我们自定义一个类,如果我们想把这个类交给ioc容器管理,加上@Component衍生注解即可,
如果这个类不是我们自己自定义的,是我们引入第三方依赖中的,而且我们还想把这个类交给ioc容器管理,那么我们应该定义一个方法,在这个方法上加上@Bean
在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!
相关文章:

【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)
文章目录 🍔Bean的获取🎄注入IOC容器对象⭐代码实现🛸根据bean的名称获取🛸根据bean的类型获取🛸根据bean的名称和类型获取 🎄Bean的作用域⭐代码实现🎈注意 🎄第三方Bean⭐代码实现…...

彭涛:2023年终复盘,工作,团队,个人!
眨眼2023即将结束,2024即将开启,每年这个时候,都会简单总结下自己这一年,既是对今年的一个复盘和回顾,也是对新一年的向往和期待。 我的2023年,大概分为 「个人」,「家庭」,「团队」…...

【数据结构和算法】---二叉树(2)--堆的实现和应用
目录 一、堆的概念及结构二、堆结构的实现2.1堆向下调整算法2.2堆向上调整算法2.3删除堆顶元素2.4插入元素2.5其他函数接口 三、堆结构的应用3.1堆排序3.2Top-k问题 四、堆概念及结构相关题目 一、堆的概念及结构 如果有一个数字集合,并把它的所有元素按完全二叉树…...

【大模型实践】基于文心一言的对话模型设计
文心一言(英文名:ERNIE Bot)是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动、回答问题、协助创作,高效便捷地帮助人们获取信息、知识和灵感。文心一言从数万亿数据和数千亿知识…...
聊聊PowerJob的StoreStrategy
序 本文主要研究一下PowerJob的StoreStrategy StoreStrategy tech/powerjob/worker/common/constants/StoreStrategy.java Getter AllArgsConstructor public enum StoreStrategy {DISK("磁盘"),MEMORY("内存");private final String des; }StoreStra…...

HTML+CSS+JS网页设计期末课程大作业 web课程设计 web前端开发 网页规划与设计
HTMLCSSJS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计 💥 文章目录一、🚩 网站描述二、🎌 网站介绍三、🏴 网站类型A 个人博客主题B 人物明星主题C 旅游主题D 游戏主题E 动漫主题F 美食主题G 校园主题H 企…...

vscode | python | remote-SSH | Debug 配置 + CLIP4Clip实验记录
安装Extension 本地安装Remote-SSH、python 远程服务器上安装Python 难点:主机和远程服务器上安装Python扩展失败,可能是网络、代理等原因导致解决方法: 主机在官方网站下载Python扩展:https://marketplace.visualstudio.com/it…...
【Linux】实现windows主机与ubuntu虚拟机系统之间文件/字符复制粘贴
环境 硬件:通用PC 系统:Ubuntu 18.04 《 》Windows10 软件 :VMware Workstation 16 Pro 解决 0、现象 使用Ubuntu 虚拟机时,有时需要来回复制文件或者字符串到主机或虚拟机。 1、分析 2、思路 3、解决 //先安装open-vm-to…...

Ubuntu22.04-安装后Terminal无法调出
参考: Ubuntu20.04 终端打开不了的问题排查_ubuntu终端打不开-CSDN博客 https://blog.csdn.net/u010092716/article/details/130968032 Ubuntu修改locale从而修改语言环境_ubuntu locale-CSDN博客 https://blog.csdn.net/aa1209551258/article/details/81745394 问…...

ffmpeg两种windows版本区别说明
版本一 必须拷贝exe和dll文件才能使用,如果缺少dll则exe不正正常执行 如果缺少dll ,执行 exe会报错如下 版本2 直接拷贝exe就能使用,没有依赖的环境...

最新国内AI绘画Midjourney绘画提示词Prompt分享
一、Midjourney绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭…...

ChatGPT4.0(中文版)国内无限制免费版(附网址)
ChatGPT,由OpenAI开发的人工智能语言模型。它是你的数字对话伙伴,无论你有何问题或需要什么帮助,它都能提供有用的信息。 经过不断的研发和更新,ChatGPT的性能和功能得到了显著提升。现在,我们将重点介绍ChatGPT的两个…...

模拟电路基础知识笔记,你想知道的都有,建议收藏!
大家总说模电知识总是学不会,IC修真院为大家整理了模拟电子基础知识,看看你掌握了多少,文末可以获取全部哦。 文末可领全部文档 1、PN结是晶体二极管的基本结构,也是一般半导体器件的核心。 2、 射极输出器没有电压放大能力&am…...

【强化学习】基于蒙特卡洛MC与时序差分TD的简易21点游戏应用
1. 本文将强化学习方法(MC、Sarsa、Q learning)应用于“S21点的简单纸牌游戏”。 类似于Sutton和Barto的21点游戏示例,但请注意,纸牌游戏的规则是不同且非标准的。 2. 为方便描述,过程使用代码截图,文末附链…...
Pandas 高级教程——高级时间序列分析
Python Pandas 高级教程:高级时间序列分析 Pandas 提供了强大的时间序列处理功能,使得对时间序列数据进行高级分析变得更加灵活和方便。在本篇博客中,我们将深入介绍 Pandas 中的高级时间序列分析技术,并通过实例演示如何应用这些…...

解决Pycharm pip安装模块太慢问题,pycharm2022没有manage repositories配置镜像源
解决方案 方法清华阿里云中国科技大学华中理工大学 或者直接-i 加镜像 方法 URL写下面任意一个 清华 https://pypi.tuna.tsinghua.edu.cn/simple阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学 http:/…...

十二:爬虫-Scrapy框架(上)
一:Scrapy介绍 1.Scrapy是什么? Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架) 通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片 Scrapy使用了Twisted异步网…...

BUUCTF Reverse/[2019红帽杯]Snake
BUUCTF Reverse/[2019红帽杯]Snake 下载解压缩后得到可执行文件,而且有一个unity的应用程序,应该是用unity编写的游戏 打开是一个贪吃蛇游戏 用.NET Reflector打开Assembly-CSharp.dll。(unity在打包后,会将所有的代码打进一个Ass…...

概率论相关题型
文章目录 概率论的基本概念放杯子问题条件概率与重要公式的结合独立的运用 随机变量以及分布离散随机变量的分布函数特点连续随机变量的分布函数在某一点的值为0正态分布标准化随机变量函数的分布 多维随机变量以及分布条件概率max 与 min 函数的相关计算二维随机变量二维随机变…...

C#中的Attribute详解(上)
C#中的Attribute详解(上) 一、Attribute是什么二、Attribute的作用三、Attribute与注释的区别四、系统Attribute范例1、如果不使用Attribute,为了区分这四类静态方法,我们只能通过注释来说明,但这样做会给系统带来很多…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...