You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot WebSocket Handler中@Autowired注入为空问题排查求助

问题根因

你在WebSocketConfig中手动通过new MessageWsHandler()创建Handler实例,该实例没有被Spring IoC容器托管,Spring不会对非容器管理的对象执行依赖注入,因此@Autowired标注的messageService无法被赋值,运行时为空。

解决方案

将手动new的Handler替换为Spring容器托管的实例即可,修改后的代码如下:

修改后的WebSocketConfig.java

@Configuration
public class WebSocketConfig {

    @Autowired
    private Environment environment;
    // 注入Spring托管的MessageWsHandler实例
    @Autowired
    private MessageWsHandler messageWsHandler;

    @Bean
    public WebSocketConnectionManager instrumentsWsConnectionManager() {
        // 传入注入的实例,而非手动new的实例
        return getWebSocketConnectionManager(environment.getProperty("wsconfig.uri-prefix") + environment.getProperty("wsconfig.message-uri"), messageWsHandler);
    }

    private WebSocketConnectionManager getWebSocketConnectionManager(String webSocketUri, WebSocketHandler webSocketHandler)
    {
        WebSocketConnectionManager manager = new WebSocketConnectionManager(
                new StandardWebSocketClient(),
                webSocketHandler,
                webSocketUri);
        manager.setAutoStartup(true);
        return manager;
    }
}

语法错误修正提示

原MessageWsHandler.java存在语法错误,类名和implements关键字之间缺少空格,修正后如下:

@Component
public class MessageWsHandler implements WebSocketHandler {

    @Autowired
    MessageService messageService;

    // 其余业务代码
}

额外注意事项

如果修改后仍存在注入失败问题,请确认MessageWsHandler和MessageService所在的包在Spring Boot启动类的组件扫描路径范围内,默认扫描规则为启动类所在包及其所有子包。

内容的提问来源于stack exchange,提问作者Siddharth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:15:04