背景:在websocket在有新的连接加入进来时,调用servier中的服务,使用 @Autowired 注入的 Bean 竟然是 null!这并非 Spring 的 Bug,而是对 WebSocket 生命周期管理理解不足导致的。

了解这个问题,我们需要区分两个关键概念:

  • Spring 容器: 负责管理 Bean 的生命周期,包括实例化、依赖注入和销毁。
  • WebSocket 容器: 负责管理 WebSocket 端点的生命周期,例如建立连接、接收消息和关闭连接。

默认情况下,WebSocket 容器负责创建 @ServerEndpoint 注解的类的实例,并且不会使用 Spring 的依赖注入机制。 这意味着即使你使用了 @Component 注解,Spring 容器也不会自动将 Bean 注入到 WebSocket 端点类中。

一些文章将此问题归咎于 Spring Bean 的单例特性与 WebSocket 端点类的多例特性之间的冲突。这种说法并不准确。 Spring 的依赖注入机制并不限制单例 Bean 注入到多例 Bean 中。

问题的根源在于:Spring 容器根本没有参与 WebSocket 端点类的实例化过程,因此依赖注入也就无从谈起。

可以使用上下文类来得到:

@Component
public class SpringContextHolder implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) {SpringContextHolder.context = applicationContext;}public static <T> T getBean(Class<T> clazz) {return context.getBean(clazz);}
}

在使用的时候,get需要的

SpringContextHolder.getBean(MetalDefectDetectionService.class);

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

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

相关文章

MGER实验

一、实验拓扑图二、配置1.R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址R1侧为15.1.1.1&#xff0c;对应R5为15.1.1.2R2侧为25.1.1.2&#xff0c;对应R5为25.1.1.1R3侧为35.1.1.2&#xff0c;对应R5为35.1.1.1R4侧为45.1.1.2&#xff0c;对应R…

基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(下)

— 登录接口 — @app.post(“/token”) def login(form_data: OAuth2PasswordRequestForm = Depends()): user = fake_users_db.get(form_data.username) if not user or form_data.password != user[“password”]: raise HTTPException(status_code=400, detail=“用户名或密…

python学智能算法(二十九)|SVM-拉格朗日函数求解中-KKT条件

引言 前序学习进程中&#xff0c;对拉格朗日函数执行了初步求导&#xff0c;并获得了简化后的拉格朗日函数极值计算式&#xff1a; L(w,b,α)∑i1mαi−12∑i,j1mαiαjyiyjxiTxjL(w,b,\alpha)\sum_{i1}^{m}\alpha_{i}-\frac{1}{2}\sum_{i,j1}^{m}\alpha_{i}\alpha_{j}y_{i}y_…

【AI论文】MiroMind-M1:通过情境感知多阶段策略优化实现数学推理的开源新进展

摘要&#xff1a;近期&#xff0c;大型语言模型已从流畅的文本生成发展至能在多个领域进行高级推理&#xff0c;由此催生了推理语言模型&#xff08;RLMs&#xff09;。在众多领域中&#xff0c;数学推理堪称代表性基准&#xff0c;因为它需要精确的多步骤逻辑与抽象推理能力&a…

《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——6. 传统算法实战:用OpenCV测量螺丝尺寸

目录一、概述1.1 背景介绍&#xff1a;从“看见”到“看懂”1.2 学习目标二、图像预处理&#xff1a;让目标更突出三、轮廓发现与尺寸测量四、总结与展望一、概述 1.1 背景介绍&#xff1a;从“看见”到“看懂” 在上一篇文章中&#xff0c;我们成功地为应用程序安装了“眼睛…

《人性的弱点》重构【01】

手上有本《人性的弱点》&#xff08;韩文桥 译&#xff0c;浙江文艺出版社&#xff0c;2017.1出版&#xff09;&#xff0c;前些年买的&#xff0c;近期翻出来看看。这门书虽成书于80多年前&#xff0c;但卡耐基对人性洞察之深刻&#xff0c;时至今日&#xff0c;并未觉得过时。…

k8s开启审计日志

k8s默认是关闭审计功能的&#xff0c;想看的话需要到apiserver的pod中才可以。 开启此功能是为了进行k8s审计日志的收集&#xff0c;方便我们查看k8s中用户的各自操作。 开启此功能之前&#xff0c;我们要先创建个审计策略文件audit-policy.yaml 例如以下的测验文件 apiVersion…

Kafka MQ 消费者应用场景

Kafka MQ 消费者应用场景 1 消费者自动提交的时机 在 Kafka 中默认的消费位移的提交方式是自动提交,这个由消费者客户端参数 enable.auto.commit 配置,默认值为 true。当然这个默认的自动提交不是每消费一条消息就提交一次,而是定期提交,这个定期的周期时间由客户端参数 …

Git版本控制系统

Git作为目前最流行的分布式版本控制系统&#xff0c;已经成为开发者必备的技能之一。本文将全面介绍Git的核心概念、基本操作、分支管理以及与GitHub的协作开发&#xff0c;帮助读者从零开始掌握Git的使用。 一、Git概述 1.1 Git发展历史 Git诞生于2005年&#xff0c;由Linu…

如何编译RustDesk(Unbuntu 和Android版本)

编译Linux版本的RustDesk备注&#xff1a;官方文档上&#xff0c;一边都是基于sciter&#xff0c;这个在后面已经不建议使用了&#xff0c;但是依然可以编译刚开始的时候看官方的文档&#xff0c;涉及的东西比较多&#xff0c;也搞的一头雾水&#xff0c;通过B站上一个视频&…

Spring中的循环依赖:解密、破局与架构启示

> 当两个Bean紧紧相拥,Spring容器却陷入死锁——这是Java开发者的经典噩梦 某电商平台凌晨上线时突然宕机,日志里反复滚动着`BeanCurrentlyInCreationException`的报错。经排查,**优惠券服务与库存服务在初始化时相互依赖**,形成致命闭环。这个价值百万的故障案例,揭开…

DataFrame​(数据框)

一种二维表格型数据结构&#xff0c;类似于电子表格&#xff08;如 Excel&#xff09;或 SQL 表&#xff0c;由行&#xff08;记录&#xff09;​和列&#xff08;字段&#xff09;​组成。它是数据分析、机器学习和科学计算中最常用的数据结构之一&#xff0c;尤其在 ​Python…

B站视频评论数据爬取

爬取B站视频评论数据爬取与分析 如果只要单纯的脚本可以直接看项目结构里的b_comments.py 一、技术架构 1、环境配置 Python 3.8PyCharm 2、模块配置 requests&#xff1a;用于发送HTTP请求time&#xff1a;用于处理时间相关的操作csv&#xff1a;用于读写CSV文件json&#xff…

OpenAI最新大模型GPT-4o体验之Code Copilot AI编程大模型

一、前言GPT-4o&#xff08;"o"代表"全能"&#xff09;具备处理各种文本、声音和图像资料的能力&#xff0c;能够输出多种格式的文本、声音和图像。GPT-4o 的推出标志着 AI 技术的重大突破。它不再局限于单一媒介&#xff0c;而是首次实现了文本、语音和图…

社交电商推客系统全栈开发指南:SpringCloud+分润算法+Flutter跨端

一、推客系统概述与市场背景推客系统&#xff08;TuiKe System&#xff09;是一种基于社交关系的营销推广平台&#xff0c;通过用户分享商品或服务链接&#xff0c;实现裂变式传播和精准营销。近年来&#xff0c;随着社交电商的蓬勃发展&#xff0c;推客系统已成为企业获客的重…

网安-中间件-Redis未授权访问漏洞

目录 Redis Redis持久化 动态修改配置 使用反弹连接的情况 常见监听端口的方式 常见建立反弹连接的方式 流程 Linux crontab cron文件存储路径 利用Redis实现攻击 1.webshell提权案例 2.定时任务shell反弹案例 3.SSH Key getshell案例 ​编辑Redis其他利用方式 …

【c++深入系列】:万字详解栈和队列和deque(附模拟实现的源码)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 石头能被水滴穿&#xff0c;不是因为水有多强&#xff0c;而是因为它从未停过。 ★★★ 本文前置知识&#xff1a; 模版 栈 那么栈这个…

速通python加密之RSA加密

RSA加密 RSA加密是一种非对称加密算法&#xff08;与AES等对称加密不同&#xff09;&#xff0c;由罗纳德李维斯特&#xff08;Ron Rivest&#xff09;、阿迪萨莫尔&#xff08;Adi Shamir&#xff09;和伦纳德阿德曼&#xff08;Leonard Adleman&#xff09;于1977年提出&…

Java BeanUtils 类详解:作用、语法与示例

一、BeanUtils 的核心作用BeanUtils 是 Apache Commons 和 Spring Framework 提供的工具类&#xff0c;主要用于简化 JavaBean 的操作。核心功能包括&#xff1a;属性拷贝&#xff1a;对象间同名属性自动复制动态访问&#xff1a;通过字符串名称操作属性类型转换&#xff1a;自…

PyCharm高效开发全攻略

安装与基础配置下载PyCharm专业版或社区版&#xff08;免费&#xff09;并完成安装。首次启动时选择默认设置或自定义主题、字体大小等界面偏好。配置Python解释器路径&#xff08;推荐使用虚拟环境&#xff09;&#xff0c;确保项目依赖隔离。快捷键与导航熟悉核心快捷键能大幅…