WebSocket無法注入屬性的問題及解決方案
踩坑一:
原因:
是因為Spring對象的創(chuàng)建都是以單例模式創(chuàng)建的,在啟動時只創(chuàng)建一次WebSocket。而WebSocketServer在每個連接請求到來時,都會new一個對象。所以當你啟動項目時,你想要注入的對象已經(jīng)注入進去,但是當用戶連接是,新創(chuàng)建的websocket對象沒有你要注入的對象,所以會報NullPointerException
解決:
通過static關鍵字讓webSocketService屬于WebSocketServer類
private static WebSocketService webSocketService; //通過static關鍵字讓webSocketService屬于WebSocketServer類
@Autowired//注入到WebSocketServer類的webSocketService屬性里
public void setKefuService(WebSocketService webSocketService){
WebSocketServer.webSocketService= webSocketService;
}踩坑二:
使用@ServerEndpoint聲明的websocket服務器中自動注入
- 錯誤方法,這樣無法從容器中獲取
@ServerEndpoint(value = "/chat/{username}")
@Service
public class WebSocketServer {
@Resource // @Autowired
private RabbitTemplate rabbitTemplate; //null
}- 解決:使用上下文獲取
@ServerEndpoint(value = "/chat/{username}")
@Service
public class WebSocketServer {
/*
* 提供一個spring context上下文(解決方案)
*/
private static ApplicationContext context;
public static void setApplicationContext(ApplicationContext applicationContext) {
WebSocketServer.context = applicationContext;
}
}- 在啟動類中傳入上下文
@SpringBootApplication
public class TalkApplication {
public static void main(String[] args) {
//解決springboot和websocket之間使用@autowired注入為空問題
ConfigurableApplicationContext applicationContext =
SpringApplication.run(TalkApplication.class, args);
//這里將Spring Application注入到websocket類中定義的Application中。
WebSocketServer.setApplicationContext(applicationContext);
}
}- 在使用的地方通過上下文去獲取服務
context.getBean();
public void sendSimpleQueue(String message) {
String queueName = "talk";
// 在使用的地方通過上下文去獲取服務context.getBean();
RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class);
rabbitTemplate.convertAndSend(queueName, message);
}到此這篇關于WebSocket無法注入屬性的文章就介紹到這了,更多相關WebSocket無法注入屬性內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決springmvc使用@PathVariable路徑匹配問題
這篇文章主要介紹了解決springmvc使用@PathVariable路徑匹配問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java根據(jù)正整數(shù)的位數(shù)并逆序打印出各位數(shù)字
給一個不多于5位的正整數(shù),要求:一、求它是幾位數(shù),二、逆序打印出各位數(shù)字,需要的朋友可以參考下2017-02-02
Spring Cloud 服務網(wǎng)關Zuul的實現(xiàn)
這篇文章主要介紹了Spring Cloud 服務網(wǎng)關Zuul的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
MapStruct處理Java中實體與模型間不匹配屬性轉換的方法
今天小編就為大家分享一篇關于MapStruct處理Java中實體與模型間不匹配屬性轉換的方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
SpringBoot實現(xiàn)文件上傳并返回url鏈接的示例代碼
文件上傳,當我們選擇了某一個圖片文件之后,這個文件就會上傳到服務器,從而完成文件上傳的操作,是指將本地圖片、視頻、音頻等文件上傳到服務器,供其他用戶瀏覽或下載的過程,本文給大家介紹了SpringBoot實現(xiàn)文件上傳并返回url鏈接,需要的朋友可以參考下2024-11-11

