灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2051回复:0

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

楼主#
更多 发布于:2012-09-06 13:55


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.atcpu.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.atcpu.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 interface CreditCardProcessor {
ChargeResult charge(String amount, CreditCard creditCard)
throws UnreachableException; }
@ImplementedBy(PayPalCreditCardProcessor.class)
public interface 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 定义了从Interface到实现的依赖,一般不建议使用。
@ProvidedBy
@ProvidedBy 通知Injector 某个类型使用那个缺省Provider来创建实例对象,例如:
[java]  @ProvidedBy(DatabaseTransactionLogProvider.class)
public interface TransactionLog {
void logConnectException(UnreachableException e);
void logChargeResult(ChargeResult result);
}
@ProvidedBy(DatabaseTransactionLogProvider.class)
public interface 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 优先



摘自 引路蜂移动软件


喜欢0 评分0
游客

返回顶部