- 
                Notifications
    You must be signed in to change notification settings 
- Fork 1.7k
LinkedBindings
        Googler edited this page Aug 18, 2021 
        ·
        8 revisions
      
    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