Java 将@servicebean注入非spring类
我有一个websocket配置:Java 将@servicebean注入非spring类,java,spring,dependency-injection,Java,Spring,Dependency Injection,我有一个websocket配置: @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new MessageHandler(), "/websocke
@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");
但是,该类需要不止一个引用。我可以在上面为所有依赖项堆叠代码,或者创建MessageHandler@服务类,并自动关联所有依赖项
MaingMessageHandler@服务类i将无法将其作为参数传递给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;
}
这源于spring如何自动连接测试类。如果它是Springbean,为什么不能将其作为参数传递给addHandler?只需让它注入WebSocketConfig类,然后将该对象传递给方法调用即可。不管它是否带注释。只要它是一个bean,就足以用于DI。