mirror of
https://github.com/google/guice.git
synced 2026-10-20 00:17:16 +00:00
Page:
LinkedBindings
Pages
3rdPartyModules
AOP
AppsThatUseGuice
AssistedInject
Avoid Injecting Closable Resources
AvoidCallingProvideMethodsAndInjectConstructors
AvoidConditionalLogicInModules
AvoidStaticState
BeCarefulAboutIoInProviders
BestPractices
BindingAnnotations
BindingResolution
Bindings
Bootstrap
BoundFields
BuiltInBindings
ClassLoading
CustomInjections
CustomScopes
CyclicDependencies
DocumentPublicBindings
DontReuseAnnotations
Errors
ExtendingGuice
ExtensionSPI
ExternalDocumentation
FrequentlyAskedQuestions
GettingStarted
GoogleAppEngine
Grapher
Guice10
Guice20
Guice30
Guice40
Guice41
Guice42
Guice421
Guice422
Guice423
Guice500
Guice501
Guice510
Guice600
Guice700
GuiceDiscussions
GuiceInKotlin
GuicePersist
GuicePersistMultiModules
Home
InjectOnlyDirectDependencies
InjectingProviders
InjectingTheInjector
InjectionPoints
Injections
InspectingModules
InstanceBindings
JPA
JSR330
JustInTimeBindings
KeepConstructorsHidden
LinkedBindings
MentalModel
MinimizeMutability
ModulesShouldBeFastAndSideEffectFree
Motivation
Multibindings
OSGi
OptionalAOP
OrganizeModulesByFeature
PreferAtProvides
ProviderBindings
ProvidesMethods
RestrictedBindingSource
Scopes
ServletExtensionSPI
ServletModule
ServletRegexKeyMapping
Servlets
SpringComparison
Struts2Integration
ThrowingProviders
ToConstructorBindings
Transactions
UntargettedBindings
UseNullable
Clone
8
LinkedBindings
Copybara-Service edited this page 2021-08-18 11:46:42 -07:00
Table of Contents
Linked Bindings
Linked bindings map a type to its implementation. This example maps the
interface TransactionLog to the implementation DatabaseTransactionLog:
public class BillingModule extends AbstractModule {
@Provides
TransactionLog provideTransactionLog(DatabaseTransactionLog impl) {
return impl;
}
}
Now, when you call injector.getInstance(TransactionLog.class), or when the
injector encounters a dependency on TransactionLog, it will use a
DatabaseTransactionLog.
Linked bindings can also be chained:
public class BillingModule extends AbstractModule {
@Provides
TransactionLog provideTransactionLog(DatabaseTransactionLog databaseTransactionLog) {
return databaseTransactionLog;
}
@Provides
DatabaseTransactionLog provideDatabaseTransactionLog(MySqlDatabaseTransactionLog impl) {
return impl;
}
}
In this case, when a TransactionLog is requested, the injector will return a
MySqlDatabaseTransactionLog.
In addition to using @Provides method to created linked
bindings, you can also use the bind method in Guice modules. For example, the
following code links the concrete DatabaseTransactionLog class to a subclass:
bind(DatabaseTransactionLog.class).to(MySqlDatabaseTransactionLog.class);
-
User's Guide
-
Integration
-
Extensions
-
Internals
-
Releases
-
Community