Providers - generation ?

68 views
Skip to first unread message

competitivepro...@gmail.com

unread,
Feb 12, 2018, 7:19:38 AM2/12/18
to google-guice
Hi all,

I apologise if my question sounds silly or badly grounded.

I am working on a project which makes intense use of Google Guice and I've seen several places where the class I am working with uses injected providers, such as:

class WhatEver {
 
@Inject
 
WhatEver(Provider<A> providerOfA ...) { ... }

}

I do not understand how/what implements the provider as I do not see any class around my module explicitly implementing the interface.

Provider<A>


I am pretty sure there is not any.

How does that work ? Are providers synthesised/generated ? If yes I would like to see where this is done - so I can have a better idea about how the whole thing works.

Thanks in advance,
Pietro.

Stephan Classen

unread,
Feb 12, 2018, 7:32:33 AM2/12/18
to google...@googlegroups.com

Yes, Providers are generated on the fly by guice.

https://github.com/google/guice/wiki/InjectingProviders

--
You received this message because you are subscribed to the Google Groups "google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-guice...@googlegroups.com.
To post to this group, send email to google...@googlegroups.com.
Visit this group at https://groups.google.com/group/google-guice.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-guice/df1847bb-6125-434a-b00c-53614000aeb8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

competitivepro...@gmail.com

unread,
Feb 12, 2018, 7:38:05 AM2/12/18
to google-guice
I was reading that page but I can't find where it explicitly says they are generated. Would you know where the code that generates them is ?

Stephan Classen

unread,
Feb 12, 2018, 7:53:16 AM2/12/18
to google...@googlegroups.com

There are many different implementations depending on the scope and the binding.
An incomplete list is:
- InjectorImpl.getProviderOrThrow()
- Scopes.SINGLETON
- ProviderLookup.getProvider()
- Providers.of()
- Providers.gucify()

In the end it doesn't matter which implementation is actually injected.
The main things you need to know is what a provider is good for:
- Delayed injection (because something is expensive to create or only available in a specific scope)
- Multiple injection (because you need more than one instance off it. If this is the case think twice if you need DI for this class or rather a factory)
- Provide your own Provider (if you implement a custom scope)

competitivepro...@gmail.com

unread,
Feb 12, 2018, 8:17:22 AM2/12/18
to google-guice
Ah ok, thanks.

On Monday, February 12, 2018 at 12:53:16 PM UTC, scl wrote:

There are many different implementations depending on the scope and the binding.
An incomplete list is:
- InjectorImpl.getProviderOrThrow()
- Scopes.SINGLETON
- ProviderLookup.getProvider()
- Providers.of()
- Providers.gucify()

In the end it doesn't matter which implementation is actually injected.

That is actually my main interest, I am digging into the InjectorImpl.getProviderOrThrow() to see where I get. If you have other userful links such as the ones you just gave me, feel free!
Reply all
Reply to author
Forward
0 new messages