出错代码:
@Autowired
private ChatRecordMapper chatRecordMapper;
原因:
webSocket进行连接传递信息时,需要对多个客户端创建多个实例,而spring默认为单例模式,只有在遇到@Component注解时,会进行一次实例化,而之后服务器为客户端创建的实例中,spring不会进行依赖注入,因此变量为null。
解决方法:
将ChatRecordMapper声明为static变量,然后使用基于setter的依赖注入方式进行依赖注入。(注意,不能直接对静态变量标注依赖注入注解,因为静态变量在类初始化过程就被初始化了,此时spring还未实例化对象)因为spring会实例化一次Endpoint变量,然后进行一次依赖注入。而static变量为所有实例所共享。
代码:
private static ChatRecordMapper chatRecordMapper;
@Autowired
public void setChatRecordMapper(ChatRecordMapper chatRecordMapper) {
this.chatRecordMapper = chatRecordMapper;
}