Android RoboGuice使用マニュアル(10):Just-in-time Bindings
Injectorはbindings定義を確認することによって、あるタイプのインスタンスオブジェクトを作成します.Moduleで定義バインディングを「明示的宣言バインディング(Explicit bindings)」と呼びます.Injectorは、まずExplicit Bindingsを使用して、あるタイプのインスタンスオブジェクトを作成します.ただし、あるタイプがバインディングを明確に定義していない場合、Injectorは「インスタントバインディング(Just-in-time Bindings)、JIT Bindingsも暗黙的バインディング(implicit bindings)にしようとします.
Eligible Constructor
Injectorは、クラスのinjectable constructorを使用してクラスのインスタンスオブジェクトを作成します.injectable constructorは、クラスに定義されたpublicのパラメータを持たないコンストラクション関数または@Injectorタグを持つコンストラクション関数であってもよい.
例えばAndroid RoboGuice使用マニュアル(4):Linked BindingsにおけるMyRectangleの無パラメータ構造関数:
とAndroid RoboGuice使用マニュアル(6):Instance Bindings定義@Injectorタグを含むコンストラクション関数:
同等.@ImplementedByとbind定義が同時に含まれるタイプの場合、bindの定義が優先されます.
注意:@ImplementedByはInterfaceから実装への依存を定義しており、一般的には推奨されません.
@ProvidedBy
@ProvidedByは、デフォルトのProviderを使用してインスタンスオブジェクトを作成するタイプをInjectorに通知します.たとえば、次のようにします.
次のBindingと同等です.
@ImplementedByと同様に、@ProvidedByとbindが同時に定義されている場合は、モジュールで定義されているbindが優先されます.
Eligible Constructor
Injectorは、クラスのinjectable constructorを使用してクラスのインスタンスオブジェクトを作成します.injectable constructorは、クラスに定義されたpublicのパラメータを持たないコンストラクション関数または@Injectorタグを持つコンストラクション関数であってもよい.
例えばAndroid RoboGuice使用マニュアル(4):Linked BindingsにおけるMyRectangleの無パラメータ構造関数:
public class MyRectangle extends Rectangle{
public MyRectangle(){
super(50,50,100,120);
}
...
}
とAndroid RoboGuice使用マニュアル(6):Instance Bindings定義@Injectorタグを含むコンストラクション関数:
public class MySquare extends MyRectangle {
@Inject public MySquare(@Named("width") int width){
super(width,width);
}
}
@ImplementedBy
Injector , Linked Bindings , :
@ImplementedBy(PayPalCreditCardProcessor.class)
public interface CreditCardProcessor {
ChargeResult charge(String amount, CreditCard creditCard)
throws UnreachableException; }
bind(CreditCardProcessor.class) .to(PayPalCreditCardProcessor.class);
同等.@ImplementedByとbind定義が同時に含まれるタイプの場合、bindの定義が優先されます.
注意:@ImplementedByはInterfaceから実装への依存を定義しており、一般的には推奨されません.
@ProvidedBy
@ProvidedByは、デフォルトのProviderを使用してインスタンスオブジェクトを作成するタイプをInjectorに通知します.たとえば、次のようにします.
@ProvidedBy(DatabaseTransactionLogProvider.class)
public interface TransactionLog {
void logConnectException(UnreachableException e);
void logChargeResult(ChargeResult result);
}
次のBindingと同等です.
bind(TransactionLog.class)
.toProvider(DatabaseTransactionLogProvider.class);
@ImplementedByと同様に、@ProvidedByとbindが同時に定義されている場合は、モジュールで定義されているbindが優先されます.