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

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

編輯:Android開發教程

一個應用中類於類之間的依賴關系可能非常復雜,創建於個類實例,需要先創 建類所依賴的類的示例,而創建所依賴類的實例,這些類又可能依賴其它類,以 此類推。因此在創建一個類實例時,你正在需要創建的是一個對象圖對象(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 實例。

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.

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 ,後面也有詳細介紹。

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

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