Почему мой @singleton не работает? - PullRequest
0 голосов
/ 26 октября 2009

При попытке @Singleton of Guice я столкнулся с проблемой:

import com.google.inject.Singleton;

@Singleton
public class ConfigManager {
    private String data;

    public void setData(String data) {
        this.data = data;
    }

    public String getData(){
        return this.data;
    }

    public static void main(String[] args){
        ConfigManager config1 = Guice.createInjector().getInstance(ConfigManager.class);
        ConfigManager config2 = Guice.createInjector().getInstance(ConfigManager.class);
        config1.setData("data");
        System.out.println(config2.getData());
    }

} 

Почему этот простой образец всегда печатает ноль?

1 Ответ

8 голосов
/ 26 октября 2009

Синглтоны являются глобальными для инжектора, а не для JVM. Вы захотите слегка изменить свой код:

 Injector injector = Guice.createInjector();
 ConfigManager config1 = injector.getInstance(ConfigManager.class);
 ConfigManager config2 = injector.getInstance(ConfigManager.class);
...