Guice中的提供商

时间:2011-02-22 20:17:24

标签: java guice

范围设定是否适用于Guice提供商?假设我有一个FooProvider并像这样绑定:

bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST)

每个请求是否会FooProvider实例化一次?

2 个答案:

答案 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);