当前位置:操作系统 > 安卓/Android >>

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 Bindingshttp://www.zzzyk.com/kf/201205/130094.html中MyRectangle的无参数构造函数:

[java] public class MyRectangle extends Rectangle{ 
 public MyRectangle(){ 
 super(50,50,100,120); 
 } 
 ... 

public class MyRectangle extends Rectangle{
 public MyRectangle(){
 super(50,50,100,120);
 }
 ...
}

和Android RoboGuice 使用指南(6):Instance Bindingshttp://www.zzzyk.com/kf/201205/130096.html 定义的含@Injector 标记的构造函数:

[java] public class MySquare extends MyRectangle { 
 @Inject public MySquare(@Named("width") int width){ 
 super(width,width); 
 } 

public class MySquare extends MyRectangle {
 @Inject public MySquare(@Named("width") int width){
 super(width,width);
 }
}

 

[java] @ImplementedBy 
  
该标记通知Injector某个类型的缺省实现,其功能和Linked Bindings 类似,例如: 
@ImplementedBy
 
该标记通知Injector某个类型的缺省实现,其功能和Linked Bindings 类似,例如:
 

 

[java]  @ImplementedBy(PayPalCreditCardProcessor.class) 
public inte易做图ce CreditCardProcessor { 
 ChargeResult charge(String amount, CreditCard creditCard) 
 throws UnreachableException; } 
@ImplementedBy(PayPalCreditCardProcessor.class)
public inte易做图ce CreditCardProcessor {
 ChargeResult charge(String amount, CreditCard creditCard)
 throws UnreachableException; }[java] view plaincopyprint?和 

 

[java]  bind(CreditCardProcessor.class) .to(PayPalCreditCardProcessor.class); 
bind(CreditCardProcessor.class) .to(PayPalCreditCardProcessor.class);

 

等效。 如果某个类型同时含有@ImplementedBy 和bind 定义,将优先使用bind 中的定义。

注: @ImplementedBy 定义了从Inte易做图ce到实现的依赖,一般不建议使用。

@ProvidedBy

@ProvidedBy 通知Injector 某个类型使用那个缺省Provider来创建实例对象,例如:

[java]  @ProvidedBy(DatabaseTransactionLogProvider.class) 
public inte易做图ce TransactionLog { 
 void logConnectException(UnreachableException e); 
 void logChargeResult(ChargeResult result); 

@ProvidedBy(DatabaseTransactionLogProvider.class)
public inte易做图ce TransactionLog {
 void logConnectException(UnreachableException e);
 void logChargeResult(ChargeResult result);
}
和下面Binding等效:


[java]  bind(TransactionLog.class) 
 .toProvider(DatabaseTransactionLogProvider.class); 
bind(TransactionLog.class)
 .toProvider(DatabaseTransactionLogProvider.class);

 

 和@ImplementedBy 一样,如果同时定义了@ProvidedBy和bind,模块中定义的bind 优先

 


摘自 引路蜂移动软件
 

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,