Android RoboGuice使用指南(10):Just-in-time Bindings
2476 点击·0 回帖
![]() | ![]() | |
![]() | 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 优先 摘自 引路蜂移动软件 | |
![]() | ![]() |