Как загрузить переменную в ServletContext, когда приложение инициализируется с использованием полос и подсказок?
Я прочитал ответ относительно загрузки переменной, когда приложение запускается в полоску
В этом KDeveloper посоветовал использовать Guice для загрузки одноэлементного объекта вместо других техник, которые он указал. Я загрузил переменную, используя Guice. Но я не могу загрузить переменную при запуске приложения. Я не хочу, чтобы переменная загружалась всякий раз, когда происходит новое соединение. Я хочу полоску + хитрый конкретный ответ.
Кто-нибудь может мне помочь? Благодарю вас, ребята, заранее.
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;
}
}
Убедитесь, что у вас есть файлы jar Guice и Stripes-Guice, добавленные в ваш проект /classpath, и что вы настроили свой 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;
}
...