首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Google Guice 入門實戰:從 Module 綁定到 @ImplementedBy 註解簡化配置

     編輯:Java 相關知識

Google Guice 是以 JDK 1.5+ 為基礎的輕量級 DI 容器,核心優勢在於無 XML、純 Java 程式碼定義綁定、型別安全、IDE 重構友善。本文透過兩個漸進式範例快速上手。

環境需求

  • JDK 1.5 或以上
  • guice-1.0.jar(核心),加入 Classpath

範例一:標準 Module 綁定模式

四個檔案構成基本 DI 流程:

1. 介面 HelloGuice.java

package com.test.guice;
public interface HelloGuice {
    void sayHello();
}

2. 實作 HelloGuiceImpl.java

package com.test.guice;
public class HelloGuiceImpl implements HelloGuice {
    public void sayHello() {
        System.out.println("Hello Guice!");
    }
}

3. Module 綁定定義 HelloGuiceModule.java

package com.test.guice;
import com.google.inject.Binder;
import com.google.inject.Module;

public class HelloGuiceModule implements Module {
    public void configure(Binder binder) {
        // 核心綁定:介面 → 實作
        binder.bind(HelloGuice.class).to(HelloGuiceImpl.class);
    }
}

4. 測試驗證 TestGuice.java

package com.test.guice;
import junit.framework.TestCase;
import com.google.inject.Guice;
import com.google.inject.Injector;

public class TestGuice extends TestCase {
    public void testHelloGuice() {
        // 1. 建立 Injector(載入 Module)
        Injector injector = Guice.createInjector(new HelloGuiceModule());
        // 2. 取得實例(自動注入依賴)
        HelloGuice helloGuice = injector.getInstance(HelloGuice.class);
        // 3. 驗證
        helloGuice.sayHello(); // 輸出: Hello Guice!
    }
}

範例二:使用 @ImplementedBy 註解省略 Module

在介面上直接宣告預設實作,Guice 會自動掃描並綁定,無需撰寫 Module 類別。

修改介面 HelloGuice.java

package com.test.guice;
import com.google.inject.ImplementedBy;

@ImplementedBy(HelloGuiceImpl.class)
public interface HelloGuice {
    void sayHello();
}

簡化測試 TestGuice.java

public class TestGuice extends TestCase {
    public void testHelloGuice() {
        // 無需傳入 Module,Guice 自動解析 @ImplementedBy
        Injector injector = Guice.createInjector();
        HelloGuice helloGuice = injector.getInstance(HelloGuice.class);
        helloGuice.sayHello(); // 輸出: Hello Guice!
    }
}

核心 API 速查

類別/介面用途
com.google.inject.Module綁定定義介面,實作 configure(Binder)
com.google.inject.Binder綁定 API:bind(介面).to(實作).in(Scope)
com.google.inject.Guice入口類別:createInjector(Module...)
com.google.inject.Injector物件圖引擎:getInstance(Type)、injectMembers(obj)
@ImplementedBy介面註解,指定預設實作類別
@Inject標註建構子/方法/欄位需注入
com.google.inject.Scopes範圍常數:SINGLETON、PROTOTYPE 等

進階綁定技巧預覽

  • 建構子注入:@Inject public MyClass(DepA a, DepB b) { }
  • 方法注入:@Inject public void setDepA(DepA a) { }
  • 欄位注入:@Inject private DepA a;
  • 自訂註解區分同介面多實作:@BindingAnnotation + bind().annotatedWith()
  • Provider 動態提供:bind(Type).toProvider(MyProvider.class)

結語

Guice 入門極簡單:定義介面、實作、Module 綁定、Injector 取得實例。@ImplementedBy 更讓簡單案例零設定檔。後續可探索 AOP 攔截器、Servlet 整合、Struts 2/Spring 整合等進階主題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved