依赖注入 – 在Guice模块中获取实例
发布时间:2020-12-14 04:58:13 所属栏目:百科 来源:网络整理
导读:我有这门课: public class CompositeSecurityAuthorizer implements SecurityAuthorizer { @inject @CompositeSecurityAuthorizerAnnot ListSecurityAuthorizer authorizers; //Field Injection} 我想向授权者字段注入List SecurityAuthorizer值. 在我的模
我有这门课:
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引用的实例相同? 解决方法
提供者方法允许注入参数.传递给此方法的StoreAuthorizer将是模块中的单例绑定.如果你自己打电话给构造函数,Guice不会也不能做任何神奇的事情.
@Provides @CompositeSecurityAuthorizerAnnot List<SecurityAuthorizer> provideAuthorizersList(StoreAuthorizer storeAuthorizer) { List<SecurityAuthorizer> authList = new ArrayList<SecurityAuthorizer>(); authList.add(storeAuthorizer); return authList; } 另外,您可能需要考虑使用Guice Multibindings扩展来创建Set< SecurityAuthorizer>而不是自己这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读