当前位置: 首页 > news >正文

bean的管理-bean的获取

获取bean

  • 默认情况下,在Spring项目启动时,会把bean都创建好(但是还会受到作用域及延迟初始化的影响)放在IOC容器中,如果想主动获取这些bean,可以通过如下方式
    • 根据name获取bean
      • Object getBean(String name)
    • 根据类型获取bean
      • <T> T getBean(Class<T> requiredType)
    • 根据name以及类型获取bean
      • <T> T getBean(String name,Class<T> requiredType)

具体实现代码及运行结果如下

具体代码

  •  
        @AutowiredApplicationContext applicationContext;  // 自动注入IOC容器对象@Testpublic void GetBean() {// 根据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);}

运行结果

在SpringBoot项目中设置bean对象

在Spring Boot中,可以使用注解来定义和配置Bean。常用的注解包括:

  • @Component:用于标识一个普通的Bean类。
  • @Service:用于标识一个服务类,通常用于业务逻辑的处理。
  • @Repository:用于标识一个数据访问类,通常用于数据库操作。
  • @Controller:用于标识一个控制器类,通常用于处理HTTP请求。

除了以上常用的注解外,还有一些特殊用途的注解,如:

  • @Configuration:用于标识一个配置类,通常用于配置Bean的创建和依赖关系。
  • @Autowired:用于自动注入依赖的Bean。
  • @Value:用于注入配置属性的值。

通过使用这些注解,可以将普通的Java类转化为Spring Bean,使其由Spring容器进行管理。Spring容器会负责创建、初始化和销毁这些Bean,并处理它们之间的依赖关系。在应用程序中,可以通过注入Bean来使用其提供的功能和服务。

bean作用域

  • Spring支持5种作用域,后三种在web环境才生效
  • 作用域说明
    singleton容器内同名称的bean只有一个实例(单例)默认
    prototype每次使用该bean时会创建新的实例(非单例)
    request每个全球范围内会创建新的实例(web环境下,了解)
    session每个会话范围内会创建新的实例(web环境下,了解)
    application每个应用范围内会创建新的实例(web环境下,了解)
  • 可以通过@Scope注解来进行配置作用域

注意事项

  • 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时,才会创建该bean对象)。

  • prototype的bean,每一次使用该bean时都会创建一个新的实例。

  • 实际开发过程中,绝大部分的bean是单例的,也就是说绝大部分bean不需要配置scope属性。

具体代码及效果

  • scope为默认值singleton
    •     @Testpublic void GetBean() {// 根据bean的名称获取for (int i = 1; i < 5; i++) {DeptController bean1 = (DeptController) applicationContext.getBean("deptController");System.out.println(bean1);}
      }
  • 运行结果(都是同一个bean对象)

  • scope为prototype
    •  
  • 运行结果(每一次都会创建一个新的实例对象)

第三方bean

  • 对于第三方的类,我们无法在其代码中加入注解来将其添加到IOC容器中去。
  • 如果要管理的bean来自第三方(不是自定义的),是无法使用@Component及其衍生注解来说明bean的,就需要用到@Bean注解,通过@Bean注解的name/value属性指定bean名称,如果未指定,默认是方法名

具体实现

  • 在SpringBoot项目的启动类中加上一个方法,在该方法中创建第三方类的对象并且返回该对象,并且在该方法上加入@Bean注解(但是这种方式不建议
    • public class TliasApplication {public static void main(String[] args) {SpringApplication.run(TliasApplication.class, args);}@Bean  // todo 将发放返回值交给IOC容器管理,称为IOC容器的bean对象public SAXReader saxReader() {return new SAXReader();}
      }
      
  • 若要管理第三方的bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类。当应用程序启动时,Spring Boot会自动扫描并加载所有带有特定注解的配置类
    • 具体实现如下
    • @Configuration  
      public class BeanConfig {@Bean  // todo 将发放返回值交给IOC容器管理,称为IOC容器的bean对象public SAXReader saxReader() {return new SAXReader();}
      }
  • 如果在配置第三方类时要进行依赖注入的话,就可以在创建的方法中设置要注入的对象类型及其名称,然后Spring容器会继续自动装配

    • 具体代码

      • @Configuration
        public class BeanConfig {@Bean  // todo 将发放返回值交给IOC容器管理,称为IOC容器的bean对象public SAXReader saxReader(DeptService deptService) {return new SAXReader();}
        }

注意事项

  • 通过@Bean注解的name/value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名
  • 如果第三方bean需要依赖其它的bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配、
  • 项目中自定义的,使用@Component及其衍生注解
  • 项目中第三方引入的,使用@Bean注解

相关文章:

bean的管理-bean的获取

获取bean 默认情况下&#xff0c;在Spring项目启动时&#xff0c;会把bean都创建好&#xff08;但是还会受到作用域及延迟初始化的影响&#xff09;放在IOC容器中&#xff0c;如果想主动获取这些bean&#xff0c;可以通过如下方式 根据name获取bean Object getBean&#xff08…...

如何快速清理已经上传到Git仓库的.DS_Store文件

很久以前&#xff0c;发过这样一篇文章《Git全局忽略MacOS系统下的.DS_Store文件》&#xff0c;主要是针对MacOS用户&#xff0c;如何方便的在自己机器中免疫所有.DS_Store文件的误提交。如果有这个需求&#xff0c;且还没有搞过的读者可以通过上面这篇文章学习。 今天想要分享…...

美的的笔试

第一题 有两只猫咪和n条不同类型的鱼&#xff0c;每条鱼都只能被其中一只猫咪吃掉。 下标为i处的鱼被吃掉的得分为: 如果第一只猫咪吃掉,则得分为reward1[i]。如果第二只猫咪吃掉,则得分为reward[i]。 给你一个正整数数组reward1 &#xff0c;一个正整数数组reward2&#xff0…...

Android 1.2 开发环境搭建

目录 1.2 开发环境搭建 1.JDK安装与配置 2.开发工具二选一 3.相关术语的解析 4.ADB命令行的一些指令 5.APP程序打包与安装的流程&#xff1a; 6.APP的安装过程&#xff1a; 7.本节小结 1.2 开发环境搭建 现在主流的Android开发环境有: ①Eclipse ADT SDK ②Android Stu…...

vue 页面加水印

首先创建一个waterMark.js文件&#xff0c;当然文件命名可自定义&#xff0c; use strictconst watermark {}/**** param {要设置的水印的内容} str* param {需要设置水印的容器} container*/ const setWatermark (str, container) > {const id 1.23452384164.123412415…...

Android ImageView详解

scaleType属性详解 在 Android 中&#xff0c;ImageView 控件的 scaleType 属性用于指定图像在 ImageView 内部的缩放和对齐方式。scaleType 属性可以帮助你控制图像的显示方式&#xff0c;以适应 ImageView 的尺寸或实现其他特定的显示效果。以下是常见的 scaleType 属性值和…...

ElasticSearch第二讲:ES详解 - ElasticSearch基础概念

ElasticSearch第二讲&#xff1a;ES详解 - ElasticSearch基础概念 在学习ElasticSearch之前&#xff0c;先简单了解下ES流行度&#xff0c;使用背景&#xff0c;以及相关概念等。本文是ElasticSearch第二讲&#xff0c;ElasticSearch的基础概念。 文章目录 ElasticSearch第二讲…...

Ajax模拟视频点赞功能

前台 <%--Created by IntelliJ IDEA.User: xxDate: 2023/9/4Time: 10:00To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head>&l…...

java解决 衣服尺码 Compare T-Shirt Sizes

java解决衣服尺码 时间限制&#xff1a;3000MS 内存限制&#xff1a;589824KB 题目描述&#xff1a; 一般来说衣服尺码分为L&#xff0c;M&#xff0c;S三种&#xff0c;分别代表大(Large)&#xff0c;中(Medium)和小(Small)。不过由于人的身高差异性较大&#xff0c;尺码又会…...

基于python+Django深度学习的音乐推荐方法研究系统设计与实现

摘 要 数字化时代带动着整个社会的信息化发展&#xff0c;随着数字媒体的不断发展&#xff0c;现在通多媒体数字产品的内容越来越丰富&#xff0c;传播影响力越来越强&#xff0c;以音乐为例&#xff0c;现在的音乐文化多样、音乐资源也异常的丰富&#xff0c;在这种大数据的环…...

【枚举区间+线段树】CF Ehu 152 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 感觉是个套路题 对区间计数&#xff0c;按照CF惯用套路&#xff0c;枚举其中一个端点&#xff0c;对另一个端点计数 对于这道题&#xff0c;枚举右端点&#xff0c;对左端点计数 Code&#xff1a; #include &…...

宏定义天坑记录

宏定义天坑记录 事件原委与推理过程 在编译一个使用了Protobuf的项目时出现了如下报错 [ybVM-8-7-centos boost_searcher]$ make g -o http_server http_server.cc data/raw_html.pb.cc -stdc11 -lboost_system -lboost_filesystem -lpthread -ljsoncpp -lprotobuf In file…...

Git的一些常用概念与操作方法分享

Git是一个版本控制系统&#xff0c;它可以记录代码的变化历史并允许多个开发者同时对同一代码库进行开发。以下是Git的基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;- 保存代码的地方。Git仓库包含了所有的版本历史记录、代码以及其他相关文件。 分…...

webpack实战:某网站JS逆向分析

文章目录 1. 写在前面2. 抓包分析3. 扣加密代码 1. 写在前面 好的逆向能够帮助我们了解加密实现&#xff0c;然后根据加密方式&#xff08;md5,base64,res,des,rsa…)还原加密算法的过程。可以看看我之前的这篇文章&#xff1a;快速定位查找加密方式特征与技巧 目标站点&#…...

826. 安排工作以达到最大收益;2257. 统计网格图中没有被保卫的格子数;816. 模糊坐标

826. 安排工作以达到最大收益 核心思想&#xff1a;排序维护最大利润。首先我们需要对工人按照能力排序&#xff0c;前面工人满足的最大利润后面的工人肯定是满足的&#xff0c;所以我们只需要用一个tmp来维护小于等于当前工人的最大利润&#xff0c;然后如何得到tmp&#xff…...

JAVA毕业设计097—基于Java+Springboot+Vue+uniapp的医院挂号小程序系统(源码+数据库)

基于JavaSpringbootVueuniapp的医院挂号小程序系统(源码数据库)097 一、系统介绍 本系统前后端分离(网页端和小程序端都有) 本系统分为管理员、医院、用户三种角色(角色菜单可自行分配) 用户功能&#xff1a; 注册、登录、医院搜索、最新资讯、医生搜索、挂号预约、挂号记…...

4.3.3.1 【MySQL】CHAR(M)列的存储格式

我们知道 Compact 行格式在 CHAR(M) 类型的列中存储数据的时候还挺麻烦&#xff0c;分变长字符集和定长字符集的情况&#xff0c;而在 Redundant 行格式中十分干脆&#xff0c;不管该列使用的字符集是啥&#xff0c;只要是使用 CHAR(M) 类型&#xff0c;占用的真实数据空间就是…...

js 处理数组合并vs对象合并

前言: 前端开发中&#xff0c;我们会遇到各种数据的需求&#xff0c;但是后端给你返回的数据结构又不是你想要的&#xff0c; 只能自己动手&#xff0c;去组装数据&#xff0c;重新定义数据结构了。 1. js 数组合并的方法 常用的应该是 concat 方法. 示例: let arr1 […...

Webpack vs Vite的核心差异

构建速度: Webpack: Webpack的构建速度相对较慢&#xff0c;尤其在大型项目中&#xff0c;因为它需要分析整个依赖图&#xff0c;进行多次文件扫描和转译。Vite: Vite以开发模式下的极速构建著称。它利用ES模块的特性&#xff0c;只构建正在编辑的文件&#xff0c;而不是整个项…...

53、springboot对websocket的支持有两种方式-------1、基于注解开发 WebSocket ,简洁实现多人聊天界面

基于注解开发 WebSocket –注解就是&#xff1a; OnOpen、 OnClose 、 OnMessage 、OnError这些 ★ WebSocket的两种开发方式 ▲ Spring Boot为WebSocket提供了两种开发方式&#xff1a; 基于spring-boot-starter-websocket.jar开发WebSocket 基于Spring WebFlux开发WebSoc…...

告别SU冲突!雷电模拟器9.0.20+新版Magisk Delta(狐狸面具)保姆级安装避坑指南

雷电模拟器9.0.20Magisk Delta深度适配指南&#xff1a;从冲突根源到完美兼容 当你在雷电模拟器9.0.20及以上版本尝试安装Magisk Delta&#xff08;狐狸面具&#xff09;时&#xff0c;是否遇到过Root权限反复失效、SU冲突提示不断弹出的困境&#xff1f;这背后隐藏着新版模拟器…...

MounRiver Studio编译优化实战:如何为你的RISC-V项目选择-O0到-O3?

MounRiver Studio编译优化实战&#xff1a;RISC-V项目-O0到-O3的深度选择指南 当你在MounRiver Studio中点击那个小小的"Optimization"下拉框时&#xff0c;是否曾对着-O0、-O1、-O2、-Os、-O3这些选项犹豫不决&#xff1f;作为一位经历过数十个RISC-V项目的老手&am…...

终极指南:如何用5分钟安装FF14动画跳过插件提升副本效率

终极指南&#xff1a;如何用5分钟安装FF14动画跳过插件提升副本效率 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 还在为《最终幻想14》国服副本中冗长的动画而烦恼吗&#xff1f;FFXIV_ACT_Cutscene…...

手把手教你用STM32F103C8T6和NTC热敏电阻DIY一个水温监测器(附完整代码)

手把手教你用STM32F103C8T6和NTC热敏电阻DIY一个水温监测器&#xff08;附完整代码&#xff09; 水温监测在家庭养鱼、咖啡机控制、热水器管理等场景中非常实用。本文将带你从零开始&#xff0c;用最常见的STM32F103C8T6最小系统板和NTC热敏电阻&#xff0c;打造一个低成本、高…...

从DICOM到3D打印:手把手教你用3D Slicer处理医学影像全流程(含STL导出)

从DICOM到3D打印&#xff1a;医学影像处理全流程实战指南 在数字化医疗时代&#xff0c;将CT、MRI等医学影像转化为可触摸的3D打印模型&#xff0c;正在成为临床教学、手术规划和医患沟通的革命性工具。这套技术链条中最关键的桥梁&#xff0c;正是开源的3D Slicer平台——它能…...

安防摄像头ISP不够用?聊聊MIPI CSI离线模式(Offline Pipeline)与RAW数据缓存的那些事

安防摄像头ISP资源紧张&#xff1f;深度解析MIPI CSI离线模式与RAW数据缓存技术 在智能安防和车载视觉系统快速发展的今天&#xff0c;多摄像头协同工作已成为行业标配。无论是商场监控中的360度无死角覆盖&#xff0c;还是汽车环视系统中的多路影像同步处理&#xff0c;都对图…...

CANN/asc-devkit Tiling模板参数选择宏

ASCENDC_TPL_SEL_PARAM 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://…...

Zabbix监控华为防火墙丢包?可能是你的SNMP v2c配置没做对(附Python巡检脚本)

Zabbix监控华为防火墙丢包问题的深度排查与自动化解决方案 当Zabbix监控华为防火墙时出现丢包或数据异常&#xff0c;很多工程师的第一反应是检查网络连通性或Zabbix服务器配置&#xff0c;却忽略了防火墙自身SNMP v2c与安全策略的联动机制。本文将揭示这一常见误区的技术根源&…...

为什么自己写的论文重复率会很高?

很多人第一次查重最崩的一句话就是&#xff1a;“这明明是我自己写的啊&#xff1f;”但“自己写” ≠ “系统一定判你原创”。查重系统本质上不是在判断你有没有“亲手敲字”&#xff0c;而是在判断&#xff1a;你的文字表达&#xff0c;和数据库里已有内容像不像。常见几个原…...

BGA底部填充胶:嵌入式主控板可靠性设计与工艺全解析

1. 项目概述&#xff1a;为什么BGA底部填充胶是嵌入式主控板的“定海神针”&#xff1f;在嵌入式计算机主控板的设计与生产领域&#xff0c;尤其是那些采用高密度、细间距BGA&#xff08;球栅阵列&#xff09;封装芯片的板卡上&#xff0c;有一个工艺环节常常被新手工程师忽略&…...