-
Notifications
You must be signed in to change notification settings - Fork 1.7k
ProvidesMethods
When you need code to create an object, use an @Provides
method. The method
must be defined within a module, and it must have an @Provides
annotation. The
method's return type is the bound type. Whenever the injector needs an instance
of that type, it will invoke the method.
public class BillingModule extends AbstractModule {
@Override
protected void configure() {
...
}
@Provides
static TransactionLog provideTransactionLog() {
DatabaseTransactionLog transactionLog = new DatabaseTransactionLog();
transactionLog.setJdbcUrl("jdbc:mysql://localhost/pizza");
transactionLog.setThreadPoolSize(30);
return transactionLog;
}
}
TIP: @Provides
methods can be static methods or instance methods.
If the @Provides
method has a binding annotation like @PayPal
or
@Named("Checkout")
, Guice binds the annotated type. Dependencies can be passed
in as parameters to the method. The injector will exercise the bindings for each
of these before invoking the method.
@Provides @PayPal
CreditCardProcessor providePayPalCreditCardProcessor(
@Named("PayPal API key") String apiKey) {
PayPalCreditCardProcessor processor = new PayPalCreditCardProcessor();
processor.setApiKey(apiKey);
return processor;
}
Guice does not allow exceptions to be thrown from Providers. Exceptions thrown
by @Provides
methods will be wrapped in a ProvisionException
. It is bad
practice to allow any kind of exception to be thrown -- runtime or checked --
from an @Provides
method. If you need to throw an exception for some reason,
you may want to use the ThrowingProviders extension
@CheckedProvides
methods.
-
User's Guide
-
Integration
-
Extensions
-
Internals
-
Releases
-
Community