gpt4 book ai didi

java - @ServerEndpoint 和@Autowired

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:32 25 4
gpt4 key购买 nike

如何将字段自动连接到@ServerEndpoint。以下不起作用。

@Component
@ServerEndpoint("/ws")
public class MyWebSocket {
@Autowired
private ObjectMapper objectMapper;
}

但是,如果我删除 @ServerEndpoint,它会正常工作。

我正在使用 spring 3.2.1 和 Java 7

最佳答案

看来您正在尝试集成 Spring 和 Java WebSocket API。被@Component注解的类被注册到一个spring bean中,它的实例默认被spring管理为单例。但是,由 @ServerEndpoint 注释的类注册到服务器端 WebSocket 端点,每次相应端点的 WebSocket 连接到服务器时,它的实例由 JWA 实现创建和管理。因此,您不能同时使用这两个注释。

也许最简单的解决方法是使用 CDI 而不是 Spring。当然,你的服务器要支持CDI。

@ServerEndpoint("/ws")
public class MyWebSocket {
@Inject
private ObjectMapper objectMapper;
}

如果这对您不可行,您可以使用自己的ServerEndpointConfig.Configurator 版本来拦截用ServerEndpoint 注释的类的实例化过程。 .然后,您可以自己实例化该类并使用 BeanFactoryApplicationContext 的实例 Autowiring 它。实际上,这种用法已经有类似的答案。参见 that question和马丁斯的 working example (特别是,用于与 Spring 集成的定制 Configurator)。

关于java - @ServerEndpoint 和@Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29306854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com