我有这门课: public class CompositeSecurityAuthorizer implements SecurityAuthorizer { @inject @CompositeSecurityAuthorizerAnnot ListSecurityAuthorizer authorizers; //Field Injection} 我想向授权者字段注入List SecurityAuthoriz
public class CompositeSecurityAuthorizer implements SecurityAuthorizer {
@inject @CompositeSecurityAuthorizerAnnot
List<SecurityAuthorizer> authorizers; //Field Injection
}
我想向授权者字段注入List< SecurityAuthorizer>值.
在我的模块中,我有以下内容:
@Override
protected void configure() {
bind(CompositeSecurityAuthorizer.class).in(Singleton.class);
bind(StoreAuthorizer.class).in(Singleton.class);
bind(SecurityAuthorizer.class)
.annotatedWith(CompositeSecurityAuthorizerAnnot.class)
.to(CompositeSecurityAuthorizer.class);
}
@Provides @CompositeSecurityAuthorizerAnnot
List<SecurityAuthorizer> provideAuthorizersList()
{
List<SecurityAuthorizer> authList = new ArrayList<SecurityAuthorizer>();
//How do I add StoreAuthorizer while maintaining a Singleton?
//Will the line below do it through Guice magic?
//authList.add(new StoreAuthorizer());
return authList;
}
我的问题嵌入在代码注释中.当我将StoreAuthorizer添加到该列表< SecurityAuthorizer>时:
>我如何确保它与其他StoreAuthorizer引用的实例相同?
>这是Guice刚刚做的事情,所以新的StoreAuthorizer()真的在幕后调用了getInstance()吗?
@Provides @CompositeSecurityAuthorizerAnnot
List<SecurityAuthorizer> provideAuthorizersList(StoreAuthorizer storeAuthorizer)
{
List<SecurityAuthorizer> authList = new ArrayList<SecurityAuthorizer>();
authList.add(storeAuthorizer);
return authList;
}
另外,您可能需要考虑使用Guice Multibindings扩展来创建Set< SecurityAuthorizer>而不是自己这样做.
