springboot 的 websocket 里面使用 @Autowired 注入 service 或 bean 时,报空指针异常

直接上解决方案:

在你的WebSocketServer服务器中

复制代码
    public static MessageService messageService;    //要注入的类

    // 注入的时候,给类的 service 注入
    @Autowired
    public void setChatService(MessageService messageService) {
        WebSocketServer.messageService = messageService;
    }

报错原因:

本质原因:spring管理的都是单例(singleton)和 websocket (多对象)相冲突。

这个问题的本质是由于 Spring 管理的对象通常是单例(singleton),而 WebSocket 对象是多例的,因为每个用户的聊天客户端对应后台的一个 WebSocket 对象。这导致了单例和多例的冲突。Servlet 可以设计成单例,因为它是基于请求-响应模型,但 WebSocket 不适合这种设计,因为它需要保持与每个客户端的长连接。

综上所述,问题的核心在于如何解决 Spring 管理的单例对象与 WebSocket 多例对象之间的冲突。需要寻找一种方法来正确管理 WebSocket 对象,以便每个用户都能拥有自己的实时连接,并且在整个应用程序生命周期内保持正确的状态。可能的解决方案包括创建一个 WebSocket 管理器来动态管理 WebSocket 对象,或者使用 Spring 提供的作用域来限定 WebSocket 对象的范围。

相关推荐
AI你一生一世2 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
云-缩影2 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
瑞克-桑切斯3 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
AI开源软件4 小时前
SpringBoot3+Vue3 财务管理系统如何设计:从业务单据到总账的模块划分
spring boot·vue3·领域建模·会计凭证·ruoyi office·业财协同·财务系统设计
海的透彻7 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat7 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习8 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one8 小时前
算法--构造
java·数据结构·算法
SL_staff8 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff9 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈