问题
在SpringBoot项目中使用WebSocket的过程中有其他的业务操作需要注入其它接口来做相应的业务操作,但是在WebSocket的Server类中使用Autowired注解无效,这样注入的对象就是空,在使用过程中会报空指针异常。
注释:上面说的WebSocket的Server类就是指被@ServerEndpoint注解修饰的类
原因
原因就是在spring容器中管理的是单例的,他只会注入一次,而WebSocket是多对象的,当有新的用户使用的时候,他就会新创建一个WebSocket对象,这就导致了用户创建的WebSocket对象都不能注入对象了,所以在运行的时候就会发生注入对象为null的情况;
主要的原因就是Spring容器管理的方式不能直接注入WebSocket中的对象,所以需要调整一下注入方式。
解决办法
把需要注入的对象声明为静态对象,代码如下:
private static BaseWebSocketService baseWebSocketService;
@Autowired
public void setService(BaseWebSocketService baseWebSocketService){
WebSocketClient.baseWebSocketService = baseWebSocketService;
}
在SpringBoot的WebSocket应用中,由于WebSocket实例化方式导致@Autowired注解无法正常注入服务。解决方法是将需要注入的对象声明为静态,通过setter方法设置。这样可以确保在WebSocket实例中访问到正确的服务对象。
354

被折叠的 条评论
为什么被折叠?



