在springboot使用websocket过程中,需要使用到@Autowired注入service
按照平时的方法注入:
@ServerEndpoint(value = "/websocket/{name}")
@Component
public class WebSocketService {
@Autowired
ChatRecodeService chatRecodeService;
控制台报了空指针的异常
后来想了一下,会不会跟 @Autowired注解静态对象 实现的方法一样,尝试了一下:
@ServerEndpoint(value = "/websocket/{name}")
@Component
public class WebSocketService {
private static ChatRecodeService chatRecodeService;
@Autowired
public void setChatRecodeService(ChatRecodeService chatRecodeService) {
WebSocketService.chatRecodeService = chatRecodeService;
}
发现通过 @Autowired注解setter方法 这种方式是可以解决空指针的问题。
@ServerEndpoint(value = "/websocket/{name}")
@Component
public class WebSocketService {
private static ChatRecodeService chatRecodeService;
@Autowired
public WebSocketService (ChatRecodeService chatRecodeService) {
WebSocketService.chatRecodeService = chatRecodeService;
}
但是通过 @Autowired 注解构造函数 这种方式却不能解决这个错误。
找了一下类似的博客,发现原因是:
spring管理的是单例,而websocket管理的多对象,使用websocket每一次连接都会创建一个websocket对象