webSocket無法注入bean問題解決方案

2022-03-17 11:50:01 字數 1312 閱讀 7475

@component

@serverendpoint(value = "/messagesocket/")

public

class

messagewebsocket

@onopen

public

void onopen(session session, @pathparam("userid") integer userid)

@onclose

public

void

onclose()

@onmessage

public

void onmessage(string messagestr, session session, @pathparam("userid") integer userid) throws

ioexception

@onerror

public

void

onerror(session session, throwable error)

}

public

class

public

static

void

main(string args)

}

思考:為什麼websocket注入不進bean呢(已經將其加入了spring管理了,而且其他類是能夠注入websocket的實現bean)?

網上也沒有這個問題的具體解釋,我的感覺是websocket連線是需要建立多個執行緒的,其與spring自動注入有某種衝突,因此@resource和@autowire無法注入bean的引用。

參考:

本質原因:spring管理的都是單例(singleton),和websocket(多物件)想衝突。

詳細解釋:專案啟動時初始化,會初始化websocket(非使用者連線的),spring同時會為其注入service,該物件的service不是null,被成功的注入。但是,由於spring預設管理的是單例,所以只會注入一次service。當新使用者進入聊天時,系統又會建立乙個新的websocket物件,這是矛盾出現了:spring管理的都是單例,不會給第二個websocket物件注入service,所以導致只要是使用者連線建立的websocket物件,都不能再注入了。

像controller裡面有service,service裡面有dao。因為controller,service,dao都是單例,所以注入時不會報null。但是websocket不是單例,所以使用spring注入一次後,後面的物件就不會再注入了,會報null。

websocket注入service物件的方法

在websocket中無法使用spring的註解注入bean物件,可能是它底層實現的時候不受spring管理,跟junit乙個道理在junit測試裡面也是無法使用注入bean方式注入進來,但是使用springboot開發的話,就可以了,springboot應該是管理這個websocket可以直接注入...

websocket手機端無法通訊

之前做乙個專案需要手機與內網機器通訊 由於手機端由h5完成,所以採用websocket的方式 在電腦上除錯時一切正常 用手機訪問時卻在握手時中斷連線,握手不成功 後來研究了一下握手協議 如下 http 1.1 101 switching protocols r n upgrade websocket...

SpringBoot bean無法注入

description field userp in com.springboot.controller.usercontroller required a bean of type com.springboot.model.userproperties that could not be foun...