在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Bindings 概述
Just-in-time Bindings
Binding Annotations
Standard Injection
第一個(gè)例子 Hello World
Bindings 概述
Linked Bindings
如何綁定 generic 類型
@Provides Methods
RoboGuice 功能描述
概述
綜合示例 Astroboy
Inject Resources
Instance Bindings
Inject 自定義 View
Scopes
Provider Bindings
Untargetted Bindings
Inject Extra
第一個(gè)例子 Hello World
Inject Context
發(fā)送接收 Events
Inject View

Bindings 概述

一個(gè)應(yīng)用中類于類之間的依賴關(guān)系可能非常復(fù)雜,創(chuàng)建于個(gè)類實(shí)例,需要先創(chuàng)建類所依賴的類的示例,而創(chuàng)建所依賴類的實(shí)例,這些類又可能依賴其它類,以此類推。因此在創(chuàng)建一個(gè)類實(shí)例時(shí),你正在需要?jiǎng)?chuàng)建的是一個(gè)對(duì)象圖對(duì)象 (Object Graph)。

手工創(chuàng)建 Object Graph 是一個(gè)非常繁瑣而且容易出錯(cuò)的過程,并且很難對(duì)代碼進(jìn)行測(cè)試,而 Guice 或 Roboguice 可以幫助你創(chuàng)建 Object Graph,所要做的工作是配置類和類之間的依賴關(guān)系。

模塊 (Modules) 是 Guice 構(gòu)造 Object Graph 的基本構(gòu)造塊,Guice 中構(gòu)造 object Graph 的工作有被稱為 ”Injector” 的類來完成。

Guice 在模塊為 AbstractMoudule 的子類,而 RoboGuice 在模塊為 AbstractAndroidModule 的子類。 RoboGuice 利用 Injector 來創(chuàng)建所依賴的對(duì)象,而 Injector 為參照 Module 中定義的 Bindings 來構(gòu)造類于類之間的關(guān)系圖。

打個(gè)比方,如果你熟悉 make file 或是其它 Build 系統(tǒng)(如 wix) 。你使用 makefile 定義好需編譯的對(duì)象所依賴的源碼文件,這些源碼由可能依賴其它庫(kù)或頭文件等。 makefile 定義的這些依賴關(guān)系對(duì)應(yīng)到 Roboguice 中為模塊中定義的 bindings 。

使用 make 編譯某個(gè)目標(biāo)程序 (Target), make 會(huì)查看 makefile 中的依賴關(guān)系,依次先編譯被依賴的對(duì)象直到最終編譯 Target。對(duì)應(yīng)到 Roboguide(Guice) 為 Injector 創(chuàng)建某個(gè)對(duì)象,它會(huì)根據(jù)定義的 Bindings 首先創(chuàng)建那些被依賴的對(duì)象,直到創(chuàng)建所需對(duì)象。

在 HelloWorld 例子中,我們沒有看到 Injector 的直接使用,這是因?yàn)?RoboGuice 替我們調(diào)用了 Injector 來創(chuàng)建 IGreetingService 對(duì)象。

如果在某些情況下,如果你想直接使用 Injector ,可以使用 RoboActivity 的 getInjector().

比如修改 GuiceDemo,去掉 @Inject IGreetingService greetingServce 而使用 Injector 的 getInstance 來創(chuàng)建 IGreetingService 實(shí)例。

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);

 }

}

http://wiki.jikexueyuan.com/project/android-roboguice/images/3.png" alt="" />

Injector 的工作就是構(gòu)造 Object Graph,當(dāng)你調(diào)用 getInstance 來構(gòu)造某個(gè)類型的對(duì)象時(shí),Injector 會(huì)自動(dòng)根據(jù)類之間的依賴關(guān)系創(chuàng)建所需類的實(shí)例。

定義類之間的依賴關(guān)系的方法是通過擴(kuò)展 AbstractAndroidModule,重載其 configure 方法。在 configure 方法中定義各種 Bindings。 這些方法同時(shí)也做類型檢測(cè),如果使用的類型不正確,編譯器將給出錯(cuò)誤。

綁定 Bindings 可以有下面幾種類型:

  • Linked bindings
  • instance bindings
  • @provider methods
  • provider bindings
  • constructor bindings
  • untargetted bindings
  • built-in bindings
  • just-in-time bindings
  • providers 等

后面就逐個(gè)介紹這些 bindings ,這些 bindings 是通用的和 Android 平臺(tái)相關(guān)性不大,可以同時(shí)用于 Java EE ,Java SE 平臺(tái),RoboGuice 提供了于 Android 平臺(tái)相關(guān)的 dependency injector , 后面也有詳細(xì)介紹。

上一篇:Scopes下一篇:綜合示例 Astroboy