#1.環境
Spring Boot:v2.2.5
#2.困ったこと
Spring Boot でチャット機能を作成するため、WebSocket を利用。
TextWebSocketHandler を継承したクラスを作成し、その中で DB にアクセスするためにリポジトリクラスを Autowired しようとしたが、フィールドに宣言したリポジトリクラスの変数が NULL。
以下が TextWebSocketHandler を継承した WebSocketChatEndpoint クラス。
WebSocketChatEndpoint.java
@ServerEndpoint("/api/chat")
@Component
public class WebSocketChatEndpoint extends TextWebSocketHandler {
@Autowired
private ChatRepository chatRepository; //NULL
@OnOpen
public void onOpen(Session session) {
…略
実行時、chatRepository が NULL。
#3.対応
フィールドインジェクションをセッターインジェクションに変更。
WebSocketChatEndpoint.java
@ServerEndpoint("/api/chat")
@Component
public class WebSocketChatEndpoint extends TextWebSocketHandler {
private static ChatRepository chatRepository; //Autowiredされてる
@Autowired
public void setChatRepository (ChatRepository chatRepository ) {
WebSocketChatEndpoint.chatRepository = chatRepository;
}
@OnOpen
public void onOpen(Session session) {
…略
コンストラクタインジェクションは試してません。