webSocket依赖注入失败问题解决方案

出错代码:

@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;
}
posted @ 2021-05-29 16:55  杜zy  阅读(719)  评论(0)    收藏  举报