У меня есть websocket-config:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MessageHandler(), "/websocket")
.setAllowedOrigins("*")
.addInterceptors(new HttpSessionIdHandshakeInterceptor());;
}
}
И я сталкиваюсь со структурой Crysis. Как видите, класс MessageHandler не является классом @Service. Однако сам класс нуждается в ссылке на классы @Service. Я предоставляю ссылку для MessageHandler из контекста приложения, используя:
ApplicationContext context = WebSocketService.getAppContext();
WebSocketService webSocketService= (WebSocketService) context.getBean("webSocketService");
Однако классу требуется более 1 ссылки. Я мог бы просто сложить код выше для всех зависимостей, или я мог бы создать MessageHandler @Service class и автоматически связать все зависимости.
Maing MessageHandler @Service class я не смогу передать его в качестве аргумента в метод addHandler () . Однако я мог сделать:
public MessageHandler getHandler(){
ApplicationContext context = WebSocketService.getAppContext();
return (MessageHandler) context.getBean("messageHandler");
}
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(getHandler(), "/websocket")
.setAllowedOrigins("*")
.addInterceptors(new HttpSessionIdHandshakeInterceptor());;
}
Что может уберечь меня от избыточности кода. Однако я чувствую себя неуверенно, везде, где это хорошо.
Есть ли другой способ, как это сделать, или я застрял с этим?
Спасибо за помощь!