【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,为了区分这四类静态方法,我们只能通过注释来说明,但这样做会给系统带来很多…...
天津医科大学临床医学院专升本药学专业有机化学考试大纲
天津医科大学临床医学院高职升本科专业课考试大纲药学专业《有机化学》科目考试大纲 一、考试基本要求 本考试大纲主要要求考生对《有机化学》基本概念有较深入的了解,能够系统地掌握各类化合物的命名、结构特点及立体异构、主要性质、反应、来源和合成制备方法等…...
电脑开机自动断电,简单4招,快速解决!
“不知道我的电脑最近是怎么回事,每次一开机就会出现自动断电的情况,有什么方法可以解决吗?” 在使用电脑时,由于电源供应不稳定或过热,以及各种硬件问题,可能会导致电脑开机自动断电。遇到这种情况&#x…...
线程基础知识(三)
前言 之前两篇文章介绍了线程的基本概念和锁的基本知识,本文主要是学习同步机制,包括使用synchronized关键字、ReentrantLock等,了解锁的种类,死锁、竞争条件等并发编程中常见的问题。 一、关键字synchronized synchronied关键…...
elasticsearch系列七:聚合查询
概述 今天咱们来看下es中的聚合查询,在es中聚合查询分为三大类bucket、metrics、pipeline,每一大类下又有十几种小类,咱们各举例集中,有兴许的同学可以参考官网:https://www.elastic.co/guide/en/elasticsearch/refere…...
SQL面试题挑战11:访问会话切割
目录 问题:SQL解答: 问题: 如下为某电商公司用户访问网站的数据,包括用户id和访问时间两个字段。现有如下规则:如果某个用户的连续的访问记录时间间隔小于60秒,则属于同一个会话,现在需要计算每…...
2023“楚怡杯”湖南省赛“信息安全管理与评估“--应急响应(高职组)
2023“楚怡杯”湖南省“信息安全管理与评估”(高职组)任务书 2023“楚怡杯”湖南省“信息安全管理与评估”(高职组)任务书第一阶段竞赛项目试题第二阶段竞赛项目试题网络安全事件响应:需要环境私聊博主:2023“楚怡杯”湖南省“信息安全管理与评估”(高职组)任务书 第一…...
【Python百宝箱】Python引领制造变革:CAM技术全景解析与实战指南
Python 驭技术潮流:探索计算机辅助制造的全方位工具库 前言 在当今制造业的快速发展中,计算机辅助制造(Computer-Aided Manufacturing,CAM)技术扮演着至关重要的角色。为了提高制造效率、优化工艺流程以及实现数字化…...
【新版Hi3559AV100 旗舰8K30 AI摄像机芯片】
新版Hi3559AV100 旗舰8K30 AI摄像机芯片 一、总体介绍 Hi3559AV100是专业的8K Ultra-HD Camera SOC,它提供了8K30/4K120广播级图像质量的数字视频录制,支持8路Sensor输入,支持H.265编码输出或影视级的RAW数据输出,并集成高性能ISP…...
小样本学习idea(不断更新)
在此整理并记录自己的思考过程,其中不乏有一些尚未成熟或者尚未实现的idea,也有一些idea实现之后没有效果或者正在实现,当然也有部分idea已写成论文正在投稿,都是自己的一些碎碎念念的思考,欢迎交流。 研一上学期 9.…...
表情包搜索网站
一个非常不错的表情包搜索网站,输入关键词即可得到所有相关的表情,还可以选择套图下载,自制表情,非常给力666 可以点击下载,会新建窗口打开图片,鼠标右键“图片另存为”,下载文件名手动补充“…...
江苏省建设厅网站首页/百度怎么推广自己的信息
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。 1.命令格式: head [参数]... [文件]... 2…...
危险网站怎么做腾讯云认证/网盘搜索引擎入口
这几天主要在做公司微信小程序项目2.0版本的一些新增功能,其中就包括把原来的地址等个人固定信息独立成一个模块进行管理(选择收货地址),包括新增地址、地址修改、删除等可以直接选取个人地址而不需要每次都填写,话不多…...
男女做暧昧试看网站/百度贴吧入口
算法练习篇之:两个链表的第一个公共结点题目描述解题思路图示代码实现总结题目描述 输入两个链表,找出它们的第一个公共结点。 解题思路 由题意可知,两个链表后半部分出现重合,则我们可以分别定义两个指针指向各个链表的表头&a…...
传奇世界网页版论坛/seo优化推广专员招聘
写成宏,方便移植#define setbit(x,y)x|(1<#define clrbit(x,y)x&~(1<//将X的第Y位清0方法二:C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的与…...
枣庄建设委员会网站/千锋教育官方网
这是在接触一段时间的Linux网络通信后,重新回过来熟悉一些基本函数功能,所以,这里不做任何代码注释。以后再看时,再慢慢去查看每一个函数的原型、参数含义、返回值以及调用方式,这样才能真正学到东西。TCP通信流程服务…...
哈尔滨网站优化推广公司/黄石seo
在解释敏捷需求曲线时,我在上一篇文章中讲了一个好消息。 这次我想讲一个坏消息。 这是每一个经典项目经理对敏捷的恐惧,我们不经常讲述它的故事,但是它可能会发生。 一旦我讲了这个故事,我们就可以对敏捷需求曲线进行适当的分析。…...