配置以在 Websocket 端点上获取 Guice 注入
首先,我们需要一个自定义端点构建器。
public class WSConfigurator extends ServerEndpointConfig.Configurator {
@Inject
private static Injector injector;
@Override
public <T> T getEndpointInstance(Class<T> endpointClass)
throws InstantiationException
{
return injector.getInstance(endpointClass);
}
}
我们需要从我们的一个 Guice 模块中引导上面配置器中的注入器。
public class WebSocketModule extends AbstractModule {
@Override
protected void configure() {
requestStaticInjection(WSConfigurator.class);
}
}
最后,我们可以在端点的构造函数上使用 @Inject
。
@ServerEndpoint(
value = "/ws/sync",
configurator = WSConfigurator.class)
public class WSSync extends AsyncWebSocketServer {
@Inject
public WSSync(EventBus eventBus) {
...
}
}