在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对象