Ваш экземпляр HttpHandshakeInterceptor
не управляется Spring (т. Е. Вы создаете свой экземпляр с помощью new
).
У вас есть два варианта:
1.Сделайте HttpHandshakeInterceptor
Принять параметры типа UserDAO
и IArticleService
public class HttpHandshakeInterceptor implements HandshakeInterceptor {
private IArticleService articleService;
private UserDAO userDAO;
public HttpHandshakeInterceptor(UserDAO userDAO, IArticleService articleService){
this.userDAO = userDAO;
this.articleService = articleService;
}
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) {
}
Поместите @Component
поверх HttpHandshakeInterceptor
@Component
public class HttpHandshakeInterceptor implements HandshakeInterceptor {
@Autowired
private IArticleService articleService; // is null
@Autowired
private UserDAO userDAO; // is null
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) {
}
}
и используйте @Autowired
в своей конфигурации:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private UserDAO userDAO;
@Autowired
private IArticleService articleService;
@Autowired
private HttpHandshakeInterceptor interceptor;
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new SocketTextHandler(), "/user").addInterceptors(interceptor);
}
}
Youтакже можно достичь того, чего вы достигли, с помощью аннотации @Component
с определением @Bean
в одном из ваших файлов @Configuration
.
Кроме того, вы также можете пойти по пути @Configurable
, но из того, что я вижув данный момент вам это не нужно.