【发布时间】:2017-02-16 22:56:24
【问题描述】:
我不明白为什么 CDI 使用注入不适用于 websockets,使用 undertow。
下面是我为一个简单的 websocket 端点编写的代码。
@ServerEndpoint("/")
public class TestWebSocketEndpoint {
@Inject
private RetrieveAccessor retrieveAccessor;
private final Logger logger = Logger.getLogger(this.getClass().getName());
@OnOpen
public void onConnectionOpen(Session session) {
logger.info("Connection opened ... " + session.getId());
}
@OnMessage
public String onMessage(String message) {
if (!message.isEmpty()) {
return message;
}
System.out.println("RETRIEVE BEAN -> " + retrieveAccessor);
if (retrieveAccessor != null) {
return "BEAN NOT NULL";
}
return ":(";
}
@OnClose
public void onConnectionClose(Session session) {
logger.info("Connection close .... " + session.getId());
}
}
当然问题是注入的属性为空。对于下面描述的无状态 bean 的部署和注入,我当然没有问题。有没有办法解决这个问题,如果我只是初始化我需要的属性是 bean,我会遇到什么问题?因为这绝对有效。
RetrieveAccessor retrieveAccessor = new.... {code}
【问题讨论】:
-
您问题的最后一部分令人困惑。您是否正在实例化您的
RetrieveAccessor?你还提到undertow ..你在使用weld servlet吗?野蝇? -
我只是在使用 undertow,我的问题的最后一部分只是解释了该 bean 对象的正常类初始化有效,这样做会产生什么后果。
标签: java dependency-injection cdi undertow jsr356