我有获取并保持一个API令牌(简化的)的模块:注入依赖成吉斯模块
@Singleton
public class KeyHolderModule extends AbstractModule {
// This doesn't seem to be injected
private @Inject TokenConnector connector;
private DateTime keyLastRefreshed;
private String key;
private Credentials creds = config.getCreds();
@Override protected void configure() {
this.key = connector.getToken(creds);
this.keyLastRefreshed = DateTime.now();
}
@Provides @Named("apiKey") public String getKey() {
// logic to check key last refreshed and handle generating a new one
return this.key;
}
}
我上线一个空指针错误,我试图访问连接器(this.key = connector.getToken(creds);
) ,所以连接器显然没有正确接线。
我试着创建一个构造函数,并使用@Inject那里,但我手动将这些模块通过new
添加到我的应用程序bootstrap类中的列表中,所以这是有点。
显然我错过了这里的东西 - 我可能只是new
上涨了TokenConnector
在这种情况下,因为它本身没有任何依赖关系,但是这并不能解决我根本无法理解这里发生的事情。所以,如果你想看到(简化)其他代码段,或者简化了这段代码,请告诉我。
或者我认为另一种方法是绑定一个key-provider,它可以注入并封装逻辑+返回键。这与使用@Provides的guice相同吗? – pandaadb
@pandaadb我不知道你是否指任何我不熟悉的技术_key-provider_术语,但我肯定会认为这对模块来说有点沉重。如果这是我的代码审查,我当然会考虑将此提交给'提供者'顶级类,或随机提供的按键POJO(这可能是你的意思)。 –
Cheers Jeff - 是的,我最终把这件事搬到了另一个班上(但是对我发现自己的情况很好奇,因为它似乎反映了我对guice的理解上的差距。 ,我会标记为已接受 –