2

特定のリクエストセット、つまり* /GuiceListenerを介したディスパッチ用にフィルターを設定しました。

このフィルターでは、リクエストURIに基づいて、各リクエストのタイプBaseService(1つのメソッドを含むインターフェイス)のバインディングを変更します。つまり、URIが/ hello / dispatchの場合、BaseServiceをHelloServiceImplにバインドします。それ以外の場合、URIが/ bye / dispatchの場合、ByeServiceImplにバインドします。どちらもBaseServiceを実装しています。

ここで、サーブレット要求処理に参加するランダムクラスのどこかに、現在の要求に固有のBaseServiceの適切な実装を注入したいと思います。

これは可能ですか?どのように ?前もって感謝します。

4

1 に答える 1

2

さまざまなタイプのBaseServiceを提供するためにファクトリパターンを使用することを検討してください。

public interface ServiceFactory
{
  public BaseService create(String uri);
}

public class ServiceFactoryImpl implements ServiceFactory
{
  @Override
  public BaseService create(String uri)
  {
    if(uri.equals("/hello/dispatch"))
      return new HelloServiceImpl();

    else if (uri.equals("/bye/dispatch"))
      return new ByeServiceImpl();

    return null;
  }
}

次に、モジュールのファクトリ。

bind(ServiceFactory.class).to(ServiceFactoryImpl.class);

これをリクエストに挿入します。

于 2012-09-19T12:55:47.957 に答える