使用 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)
检查这个
你可以简单地写一个 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.
我的模块中有这个:
@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)
检查这个
你可以简单地写一个 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.