初次認識Guice

2021-08-29 09:25:42 字數 2151 閱讀 5044

從**上看到了有人提起這個框架——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 ...