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 对象的范围。

相关推荐
小刘不想改BUG20 分钟前
LeetCode LCR 010 和为 K 的子数组 (Java)
java·算法·leetcode
MeyrlNotFound21 分钟前
(二十一)Java集合框架源码深度解析
java·开发语言
正在走向自律30 分钟前
2025年、2024年最新版IntelliJ IDEA下载安装过程(含Java环境搭建+Maven下载及配置)
java·jvm·jdk·maven·intellij-idea
不会就选C.30 分钟前
【开源分享】健康饮食管理系统(双端+论文)
java·spring boot·开源·毕业设计
永远有多远.31 分钟前
【高频面试题】LRU缓存
java·缓存·面试
Ten peaches31 分钟前
Selenium-Java版(环境安装)
java·前端·selenium·自动化
编程、小哥哥1 小时前
Java求职者面试:从Spring Boot到微服务的技术点解析
java·spring boot·redis·微服务·spring security·高并发·面试题
Code哈哈笑1 小时前
【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化
数据库·spring boot·后端·mysql·mybatis·交互
purrrew1 小时前
【Java ee初阶】jvm(1)
java·jvm·java-ee
Uranus^1 小时前
深入解析Spring Boot与Kafka集成:构建高性能消息驱动应用
spring boot·kafka·消息队列·分布式系统