[豪の学习笔记] Spring框架学习碎碎念#5

news/2025/11/13 20:50:01/文章来源:https://www.cnblogs.com/SchwarzShu/p/19219526

跟学视频:黑马JavaWeb课程

Bean管理

获取Bean

​ 默认情况下,SpringBoot项目在启动的时候会自动的创建IOC容器(也称为Spring容器),并且在启动的过程当中会自动的将bean对象都创建好,存放在IOC容器当中。应用程序在运行时需要依赖什么bean对象,就直接进行依赖注入就可以了

​ 在Spring容器中提供了一些方法,可以主动从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)
@SpringBootTest
class SpringbootWebConfig2ApplicationTests {@Autowiredprivate ApplicationContext applicationContext; //IOC容器对象//获取bean对象@Testpublic void testGetBean(){//根据bean的名称获取DeptController bean1 = (DeptController) applicationContext.getBean("deptController");//根据bean的类型获取DeptController bean2 = applicationContext.getBean(DeptController.class);//根据bean的名称 及 类型获取DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);}
}

Bean作用域

在Spring中支持五种作用域,后三种在web环境才生效:

作用域 说明
singleton 容器内同名称的bean只有一个实例(单例)(默认)
prototype 每次使用该bean时会创建新的实例(非单例)
request 每个请求范围内会创建新的实例(web环境中)
session 每个会话范围内会创建新的实例(web环境中)
application 每个应用范围内会创建新的实例(web环境中)

可以通过@Scope注解来进行配置作用域:

@Scope("prototype")
@RestController
@RequestMapping("/depts")
public class DeptController{}

注意事项:

  • 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)
  • prototype的bean,每一次使用该bean的时候都会创建一个新的实例
  • 实际开发中,绝大部分的Bean是单例的,即绝大部分Bean不需要配置Scope属性

第三方Bean

​ 如果要管理的Bean对象来自第三方(不是自定义的),是无法用@Component及其衍生注解声明Bean的,就需要用到@Bean注解

​ 若要管理第三方Bean对象,建议对这些Bean进行集中分类配置,可以通过@Configuration注解声明一个配置类

@Configuration //配置类  (在配置类当中对第三方bean进行集中的配置管理)
public class CommonConfig {//声明第三方bean@Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean//通过@Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名public SAXReader reader(DeptService deptService){System.out.println(deptService);return new SAXReader();}
}

​ 在方法上加上一个@Bean注解,Spring 容器在启动的时候,它会自动的调用这个方法,并将方法的返回值声明为Spring容器当中的Bean对象

注意事项:

  • 通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名(一般不指定)
  • 如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配

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

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

相关文章

Docker部署Code-Server,实现远程写代码

Docker部署Code-Server,实现远你不需要在自己的电脑上安装任何复杂的工具,只需要一个浏览器,就可以开始 C、C++ 和 Python 的学习与开发。参考:使用 Docker 部署 VS Code in The Browser - 谱次 - 博客园 hub.dock…

2025 年 11 月电力金具厂家最新推荐,精准检测与稳定性能深度解析!

全球电力系统对核心部件稳定性的依赖度持续攀升,电力金具的质量与性能直接影响输电网络安全。本次 2025 年 11 月电力金具厂家推荐榜单,由国际电力设备检测协会(IPTA)联合全球三大电力工程机构共同发布,测评覆盖全…

2025 年 11 月铁附件厂家最新推荐,聚焦资质、案例、售后的五家企业深度解读!

随着电力工程、光伏发电及基础设施建设领域的全球化推进,铁附件作为核心配套产品,其品质与供应效率对工程质量的影响愈发显著。为精准筛选优质铁附件厂家,本次推荐结合国际电力设备协会(IEPEA)2025 年第三季度测评…

LucaOne模型的词汇表系统

https://github1s.com/lucaone/LucaOne/blob/master/src/models/alphabet.py#L1-L205 通过定义词汇表,就能输入蛋白质或者DNA。 这段代码定义了 LucaOne模型的词汇表系统(Alphabet类),是模型处理不同生物分子序列的核…

v4l2用户侧使用流程

前言 v4l2的用户侧使用方法的简单demo,参考:media/v4l/v4l2grab.c 实际上,v4l2的用户侧有libv4l开源库。用户可以使用此开源库快速搭建其用户侧代码。 流程 int main() {// openfd = v4l2_open("/dev/video0&q…

2025 年终端数据安全软件公司推荐数篷科技(深圳)有限公司,数据安全领域的坚实力量

在数字化浪潮席卷全球的当下,数据已然成为企业的核心资产,其安全防护至关重要。随着 AI、云计算等新兴技术的广泛应用,数据安全面临着前所未有的挑战,如数据泄露、非法访问等风险日益加剧。在此背景下,一款可靠的…

Day37(7)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\springboot-web-01

HTTP状态码大全 https://cloud.tencent.com/developer/chapter/13553package com.itheima;import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.ResponseEntity; import org.springfra…

网络协议工程 - eNSP及相关软件安装 - [eNSP, VirtualBox, WinPcap, Wireshark, Win7] - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

20232314 2025-2026-1 《网络与系统攻防技术》实验五实验报告

一、实验内容从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取信息。 尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体地理位置。 使用nmap开源软件对靶机环境…

深度学习实验一之图像特征提取和深度学习训练数据标注 - 实践

深度学习实验一之图像特征提取和深度学习训练数据标注 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

题解:ABC232G Modulo Shortest Path

由于 \(\forall i,a_i < m,b_i < m\),所以可能的边权要么是 \(a_i+b_j\),要么是 \(a_i+b_j-m\),下文简称其为一类边和二类边。 暴力建图太浪费了,发现与一个 \(a_i\) 的连边是二类边的 \(b_j\) 的值单调不减…

如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)

如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)​手把手教你如何通过 .dmg 安装包安装 MySQL 8.0.20 数据库。一、下载安装包(如果你还没下) 安装包下载:https://pan.quark.cn/s/459eb1a02c4…

题解:P3791 普通数学题

考虑做类似数位 dp 的东西。 首先把 \(n,m\) 各加一,限制转换为 \(i<n,j<m\)。 套路地枚举 \(i,j\) 和 \(n,m\) 二进制下第一个不同的位置,则更低位就可以任取了。不难发现这个时候 \(i \operatorname{xor} j …

芒格变富的逻辑

芒格变富的逻辑 金钱:金钱只是数字,资产才有价值。能带来现金流的东西。 如何变的富有: 别去羡慕蠢人,人要靠自己自律、耐心、量入为出、长期复利(缓慢寻找有价值的团队合作,以合理的价格买好公司(慢慢寻找好资…

基于Ai元人文构想的关系图

基于Ai元人文构想的关系图 基于岐金兰的Ai元人文构想,我们绘制了一个更全面、更深入的「AI元人文构想与价值工程生态系统」关系图,它展示了从基础资源到文明愿景的完整架构。 flowchart TDsubgraph A [基础资源层]A1…

题解:P10360 [PA 2024] Desant 3

很妙的一道题。 首先我们肯定有一个 $O\left ( 2^n\operatorname{poly}\left ( n,m \right ) \right ) $ 的做法,但这无法通过 \(n \leq 35\)。 考虑把状态用 \(0,1,?\) 来表示,其中 \(?\) 表示这个士兵状态仍未决…

软件项目管理工具推荐|飞书项目 vs Asana vs ClickUp vs Jira

文章将深入分析四款主流项目管理工具在需求管理、缺陷追踪、测试管理、产品协作等软件研发的关键场景中的差异与优势,帮助研发团队评估哪款工具更契合自身工作模式。 无论你是敏捷开发团队、产品经理,还是工程管理者…

题解:AT_abc232_g [ABC232G] Modulo Shortest Path

由于 \(\forall i,a_i < m,b_i < m\),所以可能的边权要么是 \(a_i+b_j\),要么是 \(a_i+b_j-m\),下文简称其为一类边和二类边。 暴力建图太浪费了,发现与一个 \(a_i\) 的连边是二类边的 \(b_j\) 的值单调不减…

dify插件开发

自定义模型供应商 当我们想使用的模型在dify官方平台上没有对应的供应商时,我们只能自己集成。 比如公司内部的delphai部署了一些开源模型,我们想集成到dify上,这时需要以插件的形式安装到dify上。(旧版本开发自定义…