首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@ServerEndpoint和@Autowired

@ServerEndpoint和@Autowired
EN

Stack Overflow用户
提问于 2015-03-27 17:39:19
回答 5查看 12.3K关注 0票数 5

如何将字段自动生成@ServerEndpoint。以下内容不起作用。

代码语言:javascript
复制
@Component
@ServerEndpoint("/ws")
public class MyWebSocket {   
    @Autowired
    private ObjectMapper objectMapper;
}

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

我正在使用Spring3.2.1和Java 7

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-03-28 15:02:58

您似乎正在尝试集成Spring和Java。由@Component注释的类被注册到spring,它的实例在缺省情况下由spring作为单例进行管理。但是,由@ServerEndpoint注释的类被注册到服务器端WebSocket端点,并且每当相应端点的WebSocket连接到服务器时,它的实例都由JWA实现创建和管理。因此,不能同时使用这两种注释。

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

代码语言:javascript
复制
@ServerEndpoint("/ws")
public class MyWebSocket {   
    @Inject
    private ObjectMapper objectMapper;
}

如果这对您来说不可行,您可以使用自己版本的ServerEndpoint来拦截带有ServerEndpointConfig.Configurator注释的类的实例化过程。然后,您可以自己实例化类,并使用BeanFactoryApplicationContext实例对其进行自动测试。事实上,这个用法已经有了类似的答案。请参阅那个问题和Martins的工作实例 (特别是用于与Spring集成的自定义配置器 )。

票数 8
EN

Stack Overflow用户

发布于 2016-12-04 07:39:54

可以使用SpringConfigurator (spring 4)解决这个问题:

将配置器添加到ServerEndpoint中:

代码语言:javascript
复制
@ServerEndpoint(value = "/ws", configurator = SpringConfigurator.class)

所需的maven依赖关系:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>${spring.version}</version>
</dependency>
票数 6
EN

Stack Overflow用户

发布于 2016-03-16 00:39:38

实际上,您应该能够将这些添加到您的课堂上。

代码语言:javascript
复制
@PostConstruct
public void init(){
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29306854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档