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.

Reply via email to