Guice volatile одно из введенных свойств - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь создать некий ConfigurationService, который будет предоставлять конфигурацию с некоторыми инъекциями. Я хочу, чтобы одно из свойств было нестабильным во время работы.

Мне бы хотелось получить что-то подобное, но я не знаюкак это сделать в Guice.

Модуль Guice:

public class ConfModule extends AbstractModule {

    protected void configure() {
        // how to bind class to itself, without any specific implementation
        bind(Property1.class).to(Property1.class);
        bind(IProperty2.class).to(Iproperty2DefaultImplementation1.class);
        bind(IProperty2.class).annotatedWith(Names.named("setterOfproperty2").to( ? ? ? );
    }
}

Класс конфигурации:

public class Conf {

    @Inject // just consatant injected property1.class
    private Property1 property1;

    // variable property impl of interface
    private IProperty2 property2;

    // default impl of interface from module binding
    @Inject
    public Conf(IProperty2 property2) {
        this.property2 = property2;
    }

    // method for changing implementation
    @Inject
    public setIProperty2(@Named("setterOfproperty2") IProperty2 property2) {
        this.property2 = property2;
    }
}

Класс обслуживания Conf:

public class ConfService {

    @Inject
    Conf configuration;


    public Conf getConf() {
        return configuration;
    }
}

Использование:

public static main() {

    // return Conf with default IProperty2 impl
    Injector injector = Guice.createInjector(new ConfModule());
    ConfService c = injector.getInstance(ConfService.class);

    // change to other Iproperty2Implementation
    c.getConf().setIProperty2(new Iproperty2Implementation2());
}

Кто-нибудь захочет мне помочь?

...