編輯: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
采用openfire作為服務器,這樣不需要再寫一個服務器,會節省不少事情,openfire經過簡單的配置就可以實現一個通信服務器的基本功能,Openfire采用Java開
【針對4.2.5版本】對移動開發一直比較感興趣,可是沒有學習過JAVA,聽說了Mono項目,網上也已經有了破解文件,就 決定自己裝一個學做開發。本來Mono for An
除了fragments(碎片),在Android3和4中新增加的特性,還有ActionBar(活動欄)。ActionBar位於傳 統標題欄的位置,就在設備屏幕的頂部。Ac
先來看一段代碼:public static void main(String[] args) { new Timer().schedule(new TimerT
Remote Service Controller 和使用Local S