如何将字段自动连接到@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
注释的类的实例化过程。 .然后,您可以自己实例化该类并使用 BeanFactory
或 ApplicationContext
的实例 Autowiring 它。实际上,这种用法已经有类似的答案。参见 that question和马丁斯的 working example (特别是,用于与 Spring 集成的定制 Configurator)。
关于java - @ServerEndpoint 和@Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29306854/