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;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM