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

相关推荐
道法自然,人法天几秒前
微服务Sentinel组件:服务保护详解
java·微服务·sentinel
lucky登1 分钟前
Spring MVC
java·spring·mvc
Kale又菜又爱玩21 分钟前
WebSocket 使用教程
网络·websocket·网络协议
章鱼小丸子逃跑中1 小时前
若依RuoYi-Cloud-Plus微服务版(完整版)前后端部署
java·前端·后端·微服务
QING6181 小时前
一文带你吃透CopyWriteArrayList的内部实现
android·java·数据结构
QING6181 小时前
一文带你吃透ConcurrentHashMap的实现和使用
android·java·数据结构
QING6181 小时前
详解:ArrayList的工作原理和实现
android·java·数据结构
林tong学2 小时前
手写一些常见算法
java·数据结构·算法·排序算法
幼儿园扛把子\2 小时前
SpringBoot牵手RabbitMQ
spring boot·rabbitmq·java-rabbitmq
Java技术小馆2 小时前
设计一个高性能的分布式限流系统
java·后端