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

在 WebSocket 中使用 @Autowired 时遇到空指针异常

背景:在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.lryc.cn/news/596048.html

相关文章:

  • XML高效处理类 - 专为Office文档XML处理优化
  • 智能制造——解读52页汽车设计制造一体化整车产品生命周期PLM解决方案【附全文阅读】
  • 智慧制造合同解决方案
  • React 项目性能优化概要
  • 客户案例 | Jabil 整合 IT 与运营,大规模转型制造流程
  • 厚铜板载流革命与精密压合工艺——高可靠性PCB批量制造的新锚点
  • 中小制造企业如何对技术图纸进行管理?
  • OneCode 3.0 @FormAnnotation 注解速查手册
  • 漫画版:细说金仓数据库
  • Qt/C++源码/监控设备模拟器/支持onvif和gb28181/多路批量模拟/虚拟监控摄像头
  • 秋招Day17 - Spring - AOP
  • 《基于蛋白质组学的精准医学》:研究进展与未来展望
  • 双指针算法介绍及使用(上)
  • GitHub 上的开源项目 ticktick(滴答清单)
  • MSTP技术
  • 【加解密与C】Rot系列(四)RotSpecial
  • 解决http下浏览器无法开启麦克风问题
  • haproxy七层均衡
  • n1 armbian docker compose 部署aipan mysql
  • 理解后端开发中的API设计原则
  • 清华大学顶刊发表|破解无人机抓取与投递难题
  • 第三章 Freertos物联网实战esp8266模块
  • LIMO:仅需817样本激活大模型数学推理能力,挑战“数据规模至上”传统范式
  • 从零构建智能对话助手:LangGraph + ReAct 实现具备记忆功能的 AI 智能体
  • MatterPort3D 数据集 | 简介 | 多途径下载
  • 低成本、高泛化能力的无人机自主飞行!VLM-Nav:基于单目视觉与视觉语言模型的无地图无人机导航
  • 基于模拟的流程为灵巧机器人定制训练数据
  • 动漫短剧系统开发全流程解析:从创意到上线的技术实践
  • CSS中的transform
  • 力扣面试150题--寻找峰值