当应用程序使用stripe和guice初始化时,如何在ServletContext中加载变量?

时间:2011-06-09 04:43:36

标签: guice stripes

我已阅读answer regarding loading variable when app starts in stripes

因为KDeveloper建议使用Guice加载单例对象而不是他指定的其他技术。我使用Guice加载变量。但是我无法在应用程序启动时加载变量。我不希望每当发生新连接时都加载变量。我想要一个条纹+ guice特定的答案。

有人可以帮助我吗?提前感谢你们。

1 个答案:

答案 0 :(得分: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>

如果您需要将单例注入actionBean,请阅读:Guice Managed Action Beans。它看起来像这样:

public class MyAction implements ActionBean {

  private final MySingleton mySingleton;

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

  ...