1

アプリがストライプで起動するときの変数の読み込みに関する回答を読みました

その中で、KDeveloper は、彼が指定した他の手法ではなく、Guice を使用してシングルトン オブジェクトをロードするようアドバイスしています。Guice を使用して変数をロードしました。しかし、アプリケーションの起動時に変数をロードできません。新しい接続が発生するたびに変数をロードしたくありません。ストライプ + ギア固有の回答が必要です。

誰かが私を助けることができますか?よろしくお願いします。

4

1 に答える 1

1

アプリケーションの開始時に Guice シングルトンを開始する場合は、それらをasEagerSingleton()でバインドする必要があります。そうしないと、最初の使用時に開始されます。コード例::

package com.myapp.myguice;

import com.google.inject.AbstractModule;

public class ApplicationModule extends AbstractModule {

  @Override
  protected void configure() {
    bind(MySingleton.class).asEagerSingleton();
  }
}

シングルトンは次のようになります。

package com.myapp.myguice;

import com.google.inject.Inject;

public class MySingleton {
  private String myValue;

  @Inject
  MySingleton() {
    myValue = UnkownAPI.getMyValue();
  }

  public String getMyValue() {
    return myValue;
  }
}

プロジェクト/クラスパスにGuiceStripes-Guice jar ファイルの両方が追加されていること、および web.xml が次のように構成されていることを確認してください。

<context-param>
  <param-name>Guice.Modules</param-name>
  <param-value>com.myapp.myguice.ApplicationModule</param-value>
</context-param>
<listener>
  <listener-class>
    com.silvermindsoftware.stripes.integration.guice.GuiceContextListener
  </listener-class>
</listener>

singleton を actionBean に注入する必要がある場合は、Guice Managed Action Beansを参照してください。次のようになります。

public class MyAction implements ActionBean {

  private final MySingleton mySingleton;

  @Inject
  MyAction(MySingleton mySingleton) {
    this.mySingleton = mySingleton;
  }

  ...
于 2011-06-09T06:57:03.040 に答える