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

Android RoboGuice使用指南(3):Bindings概述

一个应用中类于类之间的依赖关系可能非常复杂,创建于个类实例,需要先创建类所依赖的类的示例,而创建所依赖类的实例,这些类又可能依赖其它类,以此类推。因此在创建一个类实例时,你正在需要创建的是一个对象图对象(Object Graph)。
手工创建Object Graph 是一个非常繁琐而且容易出错的过程,并且很难对代码进行测试,而Guice或Roboguice可以帮助你创建Object Graph,所要做的工作是配置类和类之间的依赖关系。
模块(Modules) 是Guice 构造Object Graph 的基本构造块,Guice中构造object Graph 的工作有被称为”Injector”的类来完成。
Guice在模块为AbstractMoudule 的子类,而RoboGuice在模块为AbstractAndroidModule的子类。RoboGuice利用 Injector 来创建所依赖的对象,而Injector 为参照Module 中定义的Bindings来构造类于类之间的关系图。
打个比方,如果你熟悉make file 或是其它Build 系统(如 wix) 。你使用makefile 定义好需编译的对象所依赖的源码文件,这些源码由可能依赖其它库或头文件等。makefile 定义的这些依赖关系对应到Roboguice 中为模块中定义的bindings 。
使用make 编译某个目标程序 (Target), make 会查看makefile 中的依赖关系,依次先编译被依赖的对象直到最终编译Target。对应到Roboguide(Guice)为Injector 创建某个对象,它会根据定义的Bindings 首先创建那些被依赖的对象,直到创建所需对象。
在HelloWorld例子中,我们没有看到Injector的直接使用,这是因为RoboGuice 替我们调用了Injector来创建IGreetingService对象。
如果在某些情况下,如果你想直接使用Injector ,可以使用RoboActivity 的getInjector().
比如修改GuiceDemo,去掉@Inject IGreetingService greetingServce 而使用Injector的getInstance 来创建IGreetingService 实例。
[java]
public class GuiceDemo extends RoboActivity  { 
  
 @InjectView (R.id.hello) TextView helloLabel; 
 //@Inject IGreetingService greetingServce; 
  
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.main); 
  
 Injector injector=getInjector(); 
 IGreetingService greetingServce 
 =injector.getInstance(IGreetingService.class); 
 helloLabel.setText(greetingServce.getGreetings()); 
 } 
  

Module中的还是绑定到HelloChina.
[java]
public class GreetingModule extends AbstractAndroidModule{ 
  
 @Override 
 protected void configure() { 
 //bind(IGreetingService.class).to(HelloWorld.class); 
 bind(IGreetingService.class).to(HelloChina.class); 
  
 } 
  


\


Injector 的工作就是构造Object Graph,当你调用getInstance 来构造某个类型的对象时,Injector 会自动根据类之间的依赖关系创建所需类的实例。
定义类之间的依赖关系的方法是通过扩展AbstractAndroidModule,重载其configure方法。在configure方法中定义各种Bindings。这些方法同时也做类型检测,如果使用的类型不正确,编译器将给出错误。
绑定Bindings 可以有下面几种类型:
Linked bindings
instance bindings
@provider methods
provider bindings
constructor bindings
untargetted bindings
built-in bindings
just-in-time bindings
providers 等
后面就逐个介绍这些bindings ,这些bindings 是通用的和Android平台相关性不大,可以同时用于Java EE ,Java SE 平台,RoboGuice 提供了于Android平台相关的dependency injector ,后面也有详细介绍。


摘自 引路蜂移动软件
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,