Отложенная привязка к экземпляру с использованием Guice - PullRequest
1 голос
/ 25 апреля 2019

У меня есть это в моем модуле:

@Override
protected void configure() {
    bind(Authenticator.class).toInstance(KerberosAuthenticator.create());
}

И причина привязки к экземпляру здесь в том, что для аутентификации Kerberos требуется немного инициализации, например:

    public static KerberosAuthenticator create() {
    KerberosAuthenticator auth = new KerberosAuthenticator();
    auth.start();
    return auth;
}

Это работает. Мне особенно нравится тот факт, что он работает без шума, как фабрики и поставщики ... Могу ли я как-то отложить создание этого экземпляра. Очевидно, что метод create () вызывается во время настройки привязки. В этом случае создание не является дорогим, но в других случаях это может быть, или, возможно, даже не нужно ... Я, так или иначе, скучаю по нему в документации Guice ... Спасибо.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

используйте провайдера,

связывания (Authenticator.class) .toProvider (AuthenticatorProvider.class)

отметьте это

https://github.com/google/guice/wiki/ProviderBindings

0 голосов
/ 25 апреля 2019

Вы можете просто написать метод поставщика :

@Provides
Authenticator provideAuthenticator() {
  KerberosAuthenticator auth = new KerberosAuthenticator();
  auth.start();
  return auth;
}

Это соответствует вашему требованию лени, потому что (со страницы):

Всякий раз, когдадля инжектора нужен экземпляр этого типа, он вызовет метод.

...