使用 Guice 延迟绑定到实例

Deferred binding to instance using 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 文档中遗漏了它...... 谢谢你。

使用提供商,

绑定(Authenticator.class) .toProvider(AuthenticatorProvider.class)

检查这个

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

你可以简单地写一个 provider method:

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

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

Whenever the injector needs an instance of that type, it will invoke the method.