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

相关推荐
考虑考虑9 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯10 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路13 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
Java陈序员15 小时前
企业级!一个基于 Java 开发的开源 AI 应用开发平台!
spring boot·agent·mcp
像我这样帅的人丶你还16 小时前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev18 小时前
GreenDAO → Room
android·java·kotlin
杨运交1 天前
[041][公共模块]分布式唯一ID生成器设计与实现:一款灵活可扩展的雪花算法框架
spring boot
亦暖筑序1 天前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏1 天前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
CSharp精选营1 天前
WebSocket 快速入门教程(附示例源码)
websocket·教程·csharp·实时通信·asp.net-core