赞
踩
这个问题主要是因为Websocket的工作方式导致的,下面是详细解决方案
WebSocket 端点类通常不受 Spring IOC 管理的原因在于它们是由 WebSocket 容器(例如,Tomcat、Jetty 等)而不是 Spring 容器管理的。WebSocket 规范(JSR 356)定义了 WebSocket 端点的生命周期和管理方式,这通常与 Spring 的生命周期和依赖注入机制不同。以下是一些具体原因和解决方法:
不同的生命周期管理:
WebSocket 端点的创建和管理是由 Web 容器(如 Tomcat、Jetty 等)负责的,而不是由 Spring 容器负责。这意味着 WebSocket 端点类的实例化和生命周期管理不在 Spring 的控制范围内。
注入机制不同:
Spring 的依赖注入机制依赖于 Spring 容器管理的 Bean,但 WebSocket 端点类实例化时,Web 容器并不知道如何进行依赖注入。
@Configuration
配置在 Spring Boot 项目中,可以通过配置类和自定义 WebSocket 处理器来管理 WebSocket 连接,这样可以使用 Spring 容器管理的 Bean。
创建 WebSocket 配置类:
import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { private final MyWebSocketHandler myWebSocketHandler; public WebSocketConfig(MyWebSocketHandler myWebSocketHandler) { this.myWebSocketHandler = myWebSocketHandler; } @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myWebSocketHandler, "/websocket").setAllowedOrigins("*");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。