使用Guice延迟绑定到实例

时间:2019-04-25 15:53:20

标签: java dependency-injection guice

我的模块中有这个

@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 个答案:

答案 0 :(得分:1)

使用提供商,

bind(Authenticator.class)         .toProvider(AuthenticatorProvider.class)

检查此

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

答案 1 :(得分:0)

您可以简单地写一个provider method

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

这符合您的懒惰要求,因为(来自页面):

  

只要注入器需要该类型的实例,它将调用该方法。