范围设定是否适用于Guice提供商?假设我有一个FooProvider
并像这样绑定:
bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST)
每个请求是否会FooProvider
实例化一次?
答案 0 :(得分:6)
应该是
bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);
但是否则这应该按预期工作。
答案 1 :(得分:4)
不,FooProvider
只会由Guice 实例化一次。
范围适用于绑定,这意味着在您的示例中,如果将Foo
注入到另一个REQUEST范围的对象中,Guice将调用FooProvider.get()
并将注入返回的Foo
进入那个原始对象。
如果你想将范围应用于FooProvider,那么你必须做类似的事情(注意:我没有检查它但它应该工作):
bind(FooProvider.class).in(ServletScopes.REQUEST);
bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);