范围界定对Guice提供者有效吗?假设我有一个FooProvider
并像这样绑定:
bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST)
每个请求都会实例化FooProvider
吗? 最佳答案
否,Guice 只会实例化一次FooProvider
。
该范围适用于绑定,这在您的示例中意味着,如果将Foo
注入到另一个REQUEST范围内的对象,Guice将调用FooProvider.get()
并将返回的Foo
注入该原始对象。
如果要将范围应用于FooProvider,则必须做类似的事情(注意:我没有检查过,但是应该可以):
bind(FooProvider.class).in(ServletScopes.REQUEST);
bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);