当前位置: 首页 > 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…...

GEO2R数据下载太慢?试试这个国内镜像加速方案(附完整基因注释流程)

GEO数据下载加速与基因注释全流程实战指南 引言&#xff1a;为什么我们需要国内镜像方案 如果你曾经尝试从GEO数据库下载大型数据集&#xff0c;大概率经历过那种令人抓狂的等待——进度条像蜗牛爬行&#xff0c;下载速度以KB/s计算&#xff0c;甚至中途频繁断开。这不是你的网…...

.NET校招真实面经:手写代码、项目深挖、算法到底考什么

文章目录写在前面&#xff1a;校招面试就像相亲&#xff0c;你得先过了"眼缘"这一关第一部分&#xff1a;手写代码——别做"嘴强王者"&#xff0c;要做"手速达人"1.1 面试官为啥非要你手写代码&#xff1f;1.2 .NET校招手写代码到底考啥&#xf…...

解密SWAT模型中的土壤水分特性:如何用SPAW快速计算AWC与饱和导水率?

土壤水分特性在SWAT模型中的关键作用与SPAW实战指南 土壤水分参数对水文模拟的影响机制 在分布式水文建模领域&#xff0c;土壤水分特性参数犹如隐藏在水循环方程式中的密码钥匙。这些看似简单的数值背后&#xff0c;实则决定着水分在土壤剖面中的运移轨迹、植物根系的吸水效率…...

JY61P陀螺仪串口数据解析实战:从协议到STM32代码实现

1. JY61P陀螺仪模块初探 第一次拿到JY61P这个六轴姿态传感器时&#xff0c;我下意识以为它和常见的MPU6050差不多。但实际用下来发现&#xff0c;这个国产模块在精度和易用性上都有明显优势。最让我惊喜的是它支持串口通信&#xff0c;完美避开了I2C协议那些令人头疼的时序问题…...

Unity游戏模组加载效率提升指南:从零开始掌握MelonLoader

Unity游戏模组加载效率提升指南&#xff1a;从零开始掌握MelonLoader 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 一、问题引…...

技术赋能B端拓客:号码核验行业的破局与价值重塑,氪迹科技法人股东号码筛选系统,阶梯式价格

2026年&#xff0c;B端拓客正式迈入智能内卷时代&#xff0c;“精准获客、降本增效”成为企业突破业绩瓶颈的核心关键词&#xff0c;而号码核验作为拓客流程的前置过滤环节&#xff0c;直接决定了线索质量与人力效能&#xff0c;成为影响拓客投入回报比的关键变量。当前&#x…...

对于对话中的文本简化,OpenClaw 的压缩比和可读性如何平衡?

关于文本简化中压缩比与可读性的平衡&#xff0c;这其实是一个在工程实践中经常遇到的核心矛盾。OpenClaw 的处理方式&#xff0c;仔细推敲起来&#xff0c;背后反映的是一种偏向实用主义的权衡思路。 压缩比高&#xff0c;通常意味着文本被大幅度精简&#xff0c;只保留最核心…...

FastAPI API版本控制:URI前缀的终极实现指南

FastAPI API版本控制&#xff1a;URI前缀的终极实现指南 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi FastAPI是一个高性能、易于学习…...

用过才敢说!盘点2026年备受喜爱的的AI论文平台

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文平台&#xff0c;覆盖选题构思、文献整理、内容生成、降重润色等核心场景&#xff0c;帮你高效搞定论文&#xff0c;告别熬夜赶稿&#xff01; 一、全流程王者&#xff1a;一站式搞定论文全链路…...

拒绝手动排版!用Word域代码+样式库打造自动化技术文档(含GitHub模板)

拒绝手动排版&#xff01;用Word域代码样式库打造自动化技术文档&#xff08;含GitHub模板&#xff09; 技术文档工程师的日常往往被格式调整、编号校对这类重复劳动占据。我曾见过团队因为手动调整200页需求文档的标题格式&#xff0c;导致版本发布时间延误三天。其实&#x…...