配置以在 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) {
    ...
  }
}