Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将@servicebean注入非spring类_Java_Spring_Dependency Injection - Fatal编程技术网

Java 将@servicebean注入非spring类

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

我有一个websocket配置:

@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。