Как загрузить переменную в ServletContext, когда приложение инициализируется с использованием полос и подсказок? - PullRequest
1 голос
/ 09 июня 2011

Я прочитал ответ относительно загрузки переменной, когда приложение запускается полосами

В связи с этим KDeveloper посоветовал использовать Guice для загрузки одноэлементного объекта вместо других техник, которые он указал. Я загрузил переменную, используя Guice. Но я не могу загрузить переменную при запуске приложения. Я не хочу, чтобы переменная загружалась всякий раз, когда происходит новое соединение. Я хочу полоску + хитрый конкретный ответ.

Кто-нибудь может мне помочь? Благодарю вас, ребята.

1 Ответ

1 голос
/ 09 июня 2011

Если вы хотите, чтобы синглеты 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;
  }
}

Убедитесь, что к вашему проекту / classpath добавлены файлы Guice и Stripes-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;
  }

  ...
...