從**上看到了有人提起這個框架——guice,google名下的產物——乙個彼spring快的di容器,興趣使然,馬上到
上去看了看,發現居然是bob lee這位大仙的傑作,還猶豫什麼,download下來試試!
恩,從**試起呢?還是老規矩,碰到新的東西就來驗證我們經典的例子——hello world!
這個東西說是di,居然沒有.xml或者.properties檔案,老天它用的是該死的annotation,很好,要是大家也想嘗試的話統統5.0或 者以上的幹活。安裝好環境,開始動手!可是從**開始呢?既然說是di容器,那好,我們先把我們的程式準備好,然後再看它把各個需要的東西怎麼 inject。
public
inte***ce
printservice
很好,再來乙個它的實現:
public
class
printserviceimpl
implements
printservice}
然後呢?乙個列印客戶client:
public
class
client}
看到了麼?這次inject的不是那個該死的字串「hello world」,而是該死的列印服務!好了,client和我們的列印服務是分開的,我不知道guice會怎麼把列印服務在client需要的時候inject進來。不管怎麼做,乙個test是應該有的:
import
junit.framework.testcase;
public
class
testclient
extends
testcase}
好了,試試看,應該是紅色的條子。廢話,client在這裡根本不知道該死的列印服務在**。那麼尋找列印服務就是guice的事情了。
讓我們看看guice是怎麼進行inject的。我們想要client在使用的時候找到列印服務,那麼我們應該在client需要的時候將其inject 進去,這樣的話我們需要寫乙個類似於setter的東西來建造乙個inject點,那麼我們在client裡新增些東西:
import com.google.inject.inject;
public
class
client
void
printstring()}
我們寫入了乙個injectprintservice方法,這個方法可以充當inject點,然後我們在這個方法上面來乙個annotation——「@inject」,這就是告訴guice應該在**inject我們需要的列印服務。
好了,我們下面要做的就是把printservice和我們的實現動態的繫結起來(介面程式設計,好主意)。在guice裡,我們需要實現乙個叫做 module的介面,guice將乙個binder傳遞給你的module,然後你的module將介面和它的實現繫結起來。讓我們來試一下:
import
com.google.inject.binder;
import
com.google.inject.module;
public
class
mymodule
implements
module}
在我們需要列印服務的時候,guice會自動建立乙個printserviceimpl的例項給我們。ok,接下來就是如何注入的問題了,我們需要在test中實現:
import
junit.framework.testcase;
import
com.google.inject.*;
public
class
testclient
extends
testcase}
完了!乙個全新的hello world將要被列印出來了。
guice的工作流程是這樣的:
首先將自己建立的module傳給guice.createinjector(),guice會為你的module建立乙個binder,你的module利用這個binder來實現各種繫結,然後在guice會建立乙個injector出來,我們就可以利用這個injector來inject我們的服務了。
guice將di這個概念完完全全的詮釋了出來,使我們在編寫的應用的時候不必去考慮具體的實現在**,guice會為你動態的繫結並且inject的。很好使的框架,很有意思,以後繼續關注!!
初次認識物件導向
抽象 把乙個具體問題抽象化 封裝 把屬性和方法封裝到類中 繼承 乙個類可以繼承另一類 多型 給不同的物件傳送同乙個訊息的時候,這些物件會根據這個訊息分別給出不同的反饋 類 js中的類本質還是乙個函式,是抽象的,不具體的。function person newperson 此時person是乙個類 p...
guice 註解小結
implementedby 首先我們定義服務service,這個服務有乙個簡單的方法sayhello,當然了我們有乙個服務的預設實現serviceimp然後使用 implementedby將服務和預設實現關聯起來,方法註冊 protected void register classservicein...
Guice與例項化
guice 與例項化 class test1 class test2 class test2 guice有兩種例項化方法 生成單例,用於注射 inject protected void configure 直接 inject,inject private pgadmindao pgadmindao ...