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

相关推荐
真上帝的左手41 分钟前
10. 软件设计&架构-Spring Security 7 整合CAS SSO 单点登录
java·spring·架构·sso
Zane19941 小时前
单例线程安全、生产者消费者、死锁:并发面试三连问串讲
java·后端
云烟成雨TD2 小时前
Micrometer 系列【42】链路追踪:Span 体系 | 核心 API
java·链路追踪·micrometer
Gorway2 小时前
理解 Spring 依赖注入:从构造器注入到集合与条件 Bean
java·后端
LiLiYuan.2 小时前
【字符串常量池】
java·开发语言·面试
Sylvia33.2 小时前
从轮询到推送:足球数据API架构演进与火星数据技术拆解
java·服务器·网络·python·websocket·架构
cfm_29143 小时前
高并发系统缓存全解
java·缓存
Ghost Face...3 小时前
龙芯Docker全流程:安装到离线迁移实战
java·docker·eureka
16月6日-晴3 小时前
Java面向对象进阶—static
java·开发语言
xiaohaiAIgeo3 小时前
【2026年】ASHRAE 110与EN 14175通风柜测试标准对比:进口与国产品牌性能差距
java·前端·数据库·科普知识