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