如何将字段自动生成@ServerEndpoint。以下内容不起作用。
@Component
@ServerEndpoint("/ws")
public class MyWebSocket {
@Autowired
private ObjectMapper objectMapper;
}但是,如果我删除了@ServerEndpoint,它就能正常工作。
我正在使用Spring3.2.1和Java 7
发布于 2015-03-28 15:02:58
您似乎正在尝试集成Spring和Java。由@Component注释的类被注册到spring,它的实例在缺省情况下由spring作为单例进行管理。但是,由@ServerEndpoint注释的类被注册到服务器端WebSocket端点,并且每当相应端点的WebSocket连接到服务器时,它的实例都由JWA实现创建和管理。因此,不能同时使用这两种注释。
也许最简单的解决方法是使用CDI而不是Spring。当然,您的服务器应该支持CDI。
@ServerEndpoint("/ws")
public class MyWebSocket {
@Inject
private ObjectMapper objectMapper;
}如果这对您来说不可行,您可以使用自己版本的ServerEndpoint来拦截带有ServerEndpointConfig.Configurator注释的类的实例化过程。然后,您可以自己实例化类,并使用BeanFactory或ApplicationContext实例对其进行自动测试。事实上,这个用法已经有了类似的答案。请参阅那个问题和Martins的工作实例 (特别是用于与Spring集成的自定义配置器 )。
发布于 2016-12-04 07:39:54
可以使用SpringConfigurator (spring 4)解决这个问题:
将配置器添加到ServerEndpoint中:
@ServerEndpoint(value = "/ws", configurator = SpringConfigurator.class)所需的maven依赖关系:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>${spring.version}</version>
</dependency>发布于 2016-03-16 00:39:38
实际上,您应该能够将这些添加到您的课堂上。
@PostConstruct
public void init(){
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}https://stackoverflow.com/questions/29306854
复制相似问题