java - @ServerEndpoint 和@Autowired

标签 java spring websocket autowired

如何将字段自动连接到@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/

相关文章:

java - @Service 和 @Scope ("prototype") 一起

javascript - 使用 localStorage 和 Websocket 自动授权

websocket - 如何使用 Puppeteer 向 WebSocket 发送数据

java - Spring Rest数据模型序列化

Java:通过流通信的两个线程是公司,三个是人群

java - 我如何压缩或编码椭圆曲线公钥并将其放在网络上?

java - NotReadablePropertyException : Invalid property 'id' of bean class [java. util.LinkedHashMap]

java.lang.NoSuchMethodError : org. springframework.web.context.ConfigurableWebApplicationContext.setId(Ljava/lang/String;)V

java - Hibernate 找不到属性的 setter (org.hibernate.PropertyNotFoundException)

nginx - Nginx 背后的 SignalR - 获得 200 响应而不是 websocket 升级