关联绑定(Linked Bindings)
Linked Bindings
关联绑定(linked bindings)将一个类型与它的实现绑定。如下的例子中,TransactionLog
与它的实现DatabaseTransactionLog
绑定在一起:
public class BillingModule extends AbstractModule {
@Override
protected void configure() {
bind(TransactionLog.class).to(DatabaseTransactionLog.class);
}
}
此时,当你调用injector.getInstance(TransactionLog.class)
或注入器发现其他类依赖TransactionLog
时,就会自动使用DatabaseTransactionLog
实例。关联绑定可以绑定类型到它的任意子类型,包括实现类和扩展类。绑定具体类到它的扩展子类也是可以的,例如:
bind(DatabaseTransactionLog.class).to(MySqlDatabaseTransactionLog.class);
关联绑定也可以串联起来,例如:
public class BillingModule extends AbstractModule {
@Override
protected void configure() {
bind(TransactionLog.class).to(DatabaseTransactionLog.class);
bind(DatabaseTransactionLog.class).to(MySqlDatabaseTransactionLog.class);
}
}
在上面的例子中,当需要一个TransactionLog
时,注入器会返回一个MysqlDatabaseTransactionLog
实例。