我有一个websocket-config:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MessageHandler(), "/websocket")
.setAllowedOrigins("*")
.addInterceptors(new HttpSessionIdHandshakeInterceptor());;
}
}
我正面临结构孤岛危机。如您所见, MessageHandler 类不是@Service类。但是,该类本身需要引用@Service类。我使用以下方法从应用程序上下文中提供对 MessageHandler 的引用:
ApplicationContext context = WebSocketService.getAppContext();
WebSocketService webSocketService= (WebSocketService) context.getBean("webSocketService");
但是,该类需要超过1个引用。我可以在上面为所有依赖项堆叠代码,或者可以创建 MessageHandler @Service类,并自动装配所有依赖项。
使 MessageHandler 成为@Service类,我将无法将其作为参数传递给 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());;
}
这可以使我免于代码冗余。但是,我不确定它的良好做法。
还有其他方法可以执行此操作吗? 感谢您的帮助!
答案 0 :(得分:0)
我习惯于创建一个非弹簧管理的bean:
public CreateOrderCommand createOrderCommand(Integer userId, Integer productId, Integer count) {
CreateOrderCommand command = new CreateOrderCommand();
command.setProductId(productId);
command.setUserId(userId);
command.setBuyCount(count);
context.getAutowireCapableBeanFactory().autowireBean(command);
context.getAutowireCapableBeanFactory().initializeBean(command, command.getClass().getName());
return command;
}
这受春天如何自动连接测试班的启发。