Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android RoboGuice使用指南(10) Just-in-time Bindings

Android RoboGuice使用指南(10) Just-in-time Bindings

編輯:Android開發教程

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的無參數構造函數:

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 通知Injector 某個類型使用那個缺省 Provider來創建實例對象,例如:

@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 優先

查看全套文章:http://www.bianceng.cn/OS/extra/201301/34950.htm

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved