On Saturday, January 5, 2013 11:34:22 AM UTC+1, Michael wrote:
>
> Hi All,
>
> I found a very interesting thing about the scope of the provider. Here is
> the code of BaseModelProvider
>
> public class BaseModelProvider implements Provider<Model> {
> private int num;
> @Override
> public Model get() {
> System.out.println(num++);
> return new Model();
> }
> --------------------------------------------------------------------
> this.bind(Model.class).annotatedWith(Names.named("index")).toProvider(new
> BaseModelProvider());
>
> This way gives : 1,2,3,4,5,6.....(in singleton scope)
> ---------------
>
> this.bind(Model.class).annotatedWith(Names.named("index")).toProvider(BaseModelProvider.class);
> This way gives : 0,0,0,0,0.....(in request scope)
>
>
> I don't understand the different about this two definitions. So anybody
> knows how it works ? many thanks!
>
In the first case, you provide a Provider instance, so only this instance
will be used, making it a de-facto singleton.
In the second case, Guice will create the provider just like any other
object. If you want it to be a singleton, then annotate it with @Singleton
or bind it as a singleton with
"bind(BaseModelProvider.class).in(Singleton.class)".
This is similar to "bind(Foo.class).toInstance(new MyFoo())" vs.
"bind(Foo.class).to(MyFoo.class)".
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/google-guice/-/CccuIl5vznIJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice?hl=en.