2014-02-09 44 views
2

我正在瀏覽谷歌guice,然後我想到它是如何工作的。谷歌guice如何在內部工作

所以這是我的理論如何property injector可能工作。

Guice首先要我們創建一個injector並將所有binding信息傳遞給它。從google guice page

OK

Injector injector = Guice.createInjector(new BillingModule()); 

*代碼片段在這一點上我能想到的,有與binding所有信息的類。

,當我們做

injector.getInstance(RealBillingService.class); 

在這裏,我們做的伎倆。

injector會返回一個proxy instance爲真正RealBillingService對象,當我們調用RealBillingService對象的

方法,proxy instance調用處理程序使用reflection

搞清楚屬性注入和fullfill它的基礎上的在注射器創建過程中傳遞的信息。

問題

這是我想,在guice的工作方式。如果我錯了,'Guice'實現的方式是什麼?

如果是這種方式guice工作,然後Guice總是返回proxy object和用戶代碼總是讓在proxy objects通話。這是真的 ?我交代


圖形表示

enter image description here

回答

9

你的理解是有點過。想想這樣:當你做Guice.createInjector(...),這就是當Guice做了所有的反思,找出什麼取決於什麼和需要注入什麼地方。當你做injector.getInstance(...)時,Guice不需要做任何反思。它創建了RealBillingService,然後注入其所有(傳遞)依賴關係,並返回(不是代理)。

如果您使用Guice的AOP功能,那麼這些對象將是代理,但否則Guice不會返回代理。它只是調用@Inject的構造函數,設置@Inject -annotated字段,調用@Inject註解的方法並返回該對象。

編輯:也可參見MiniGuice,Guice-like注射器的單級實現。