出錯代碼:
@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;
}