SpringBoot統合WebSocketコンポーネント(@ServerEndPoint)の解決@Autowired自動注入不可


1.はじめに
最近、プロジェクトでWebSocketを使用する必要があります.SpringBootと統合して、いくつかの永続層の関連操作をすると、@Autowiredまたは@Resourceが自動的に注入できないため、@Autowiredまたは@Resourceが自動的に注入できないので、最初はバックエンドコードを書いていないと思っていましたが、統合方式に問題が発生しました(QQQ)、構成を変更しても解決しませんでした.最後に普通のControllerを書いてテストして、完全にOJBKを発見しました.だから問題の源はやっと見つけた.それはWebSocketが幽霊をやっていることだ.
2.原因
Springは、単一のインスタンス(singleton)を管理し、websocket(マルチオブジェクト)と競合します.
プロジェクトの起動時に初期化すると、websocket(ユーザー接続されていない)が初期化され、springは同時にサービスに注入され、そのオブジェクトのサービスはnullではなく、注入に成功します.ただしspringはデフォルトで管理されているのは単一の例なので、サービスは1回しか注入されません.新しいユーザーがチャットに入ると、システムはまた新しいwebsocketオブジェクトを作成します.spring管理はすべて単一の例であり、2番目のwebsocketオブジェクトにサービスを注入しないため、ユーザー接続で作成したwebsocketオブジェクトであれば、注入できません.
コントロールの中にサービスがあり、サービスの中にdaoがあります.コントローラ,サービス,daoはいずれも単例であるため,注入時にnullは報告されない.しかしwebsocketは一例ではないのでspringで一度注入すると、後ろのオブジェクトは注入されずnullと報告されます.
3.解決策
原因が分かった以上、それは解決しました.注入する対象をstaticと明記すれば、私のコードを例に挙げます.
private static UserService userService;

@Autowired
public void setUserService(UserService userService){
    WebSocketService.userService=userService;
}