我有一个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个引用。我可以只为所有依赖项堆叠代码,或者我可以创建Message Handler @Service类,并自动装配所有依赖项。
Maing 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());;
}
这可以节省我的代码冗余。然而,我觉得不确定,不管它的良好做法。
有没有其他方法如何做到这一点还是我坚持这个?感谢帮助!
我习惯于创建一个非spring管理的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;
}
这是受弹簧如何自动测试类的启发。