Spring Boot:依赖注入问题 - GameService 未在 CustomHandShakeInterceptor 中初始化

Spring Boot: Dependency Injection Issue - GameService not Initialized in CustomHandShakeInterceptor

提问人:yoo 提问时间:10/17/2023 最后编辑:yoo 更新时间:10/17/2023 访问量:13

问:

我正在尝试控制 Websocket 连接。因此,我实现了一个 customHandShakeInterceptor。 出于某种原因,它没有创建我的服务的实例。

@Component
public class CustomHandShakeInterceptor extends HttpSessionHandshakeInterceptor {
      @Autowired private GameService gameService;

      @Override
      public boolean beforeHandshake(
              ServerHttpRequest request,
              @NonNull ServerHttpResponse response,
              @NonNull WebSocketHandler wsHandler,
              @NonNull Map<String, Object> attributes
      ) throws Exception {
            String query = request.getURI().getQuery();
            if(query != null && query.contains("game_id"))  {
                  String game = query.substring(query.indexOf("game_id=") + 8);
                  gameService.getGame(game);
                  if(gameService.getGame(game) == null) {
                        response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
                        response.setStatusCode(HttpStatus.NOT_FOUND);

                        String jsonResponse = "{\"error\": \"Game not found\"}";
                        response.getBody().write(jsonResponse.getBytes());
                        return false;
                  }
            }
            return super.beforeHandshake(request, response, wsHandler, attributes);
      }
}

当我尝试连接到 websocket 时出现错误。

Cannot invoke "projects.web.tictactoe.service.GameService.getGame(String)" because "this.gameService" is null

我尝试手动添加 GameService 类 还尝试将 CustomHandShakeInterceptor 类移动到其他包,但结果相同。@ComponentScan(basePackageClasses = GameService.class)

我不想创建一个新的GameService实例,因为它有所有正在进行的游戏的数据。

我想知道为什么春天没有处理它,我很感激任何建议。

依赖注入 自动连 线拦截器 spring-websocket

评论

0赞 yoo 10/17/2023
我想通了。我在 WebSocketConfig 中创建了 CustomHandShakeInterceptor 的新实例,我自动连接了 CustomHandShakeInterceptor,代码工作正常。

答: 暂无答案