因为在spring中controller,service,dao默认都为单例模式,而websocket为多线程的,websocket初始化时(非连接用户)会将@Autowired的对象注入成功,后面创建socket链接后会注入为null。因为spring是单例模式,已经注入了不会重复的注入对象。
解决方法:转为静态属性
@ServerEndpoint(value = "/imserver/{username}")
@Component
public class WebSocketServer {
private static MessageService messageService;
@Autowired
public void setMessageService(MessageService messageService){
WebSocketServer.messageService = messageService;
}
......
}