我有这门课:
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()吗?
解决方法
提供者方法允许注入参数.传递给此方法的StoreAuthorizer将是模块中的单例绑定.如果你自己打电话给构造函数,Guice不会也不能做任何神奇的事情.
@Provides @CompositeSecurityAuthorizerAnnot List<SecurityAuthorizer> provideAuthorizersList(StoreAuthorizer storeAuthorizer) { List<SecurityAuthorizer> authList = new ArrayList<SecurityAuthorizer>(); authList.add(storeAuthorizer); return authList; }
另外,您可能需要考虑使用Guice Multibindings扩展来创建Set< SecurityAuthorizer>而不是自己这样做.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。