GoogleGuice3.0開發
Google Guice 3.0開發
作者:chszs,未經博主允許不得轉載。經許可的轉載需註明作者和部落格主頁:http://blog.csdn.net/chszs
Google Guice框架是一個基於Java 6以上的輕量級依賴注入框架,由Google開發。你可能會問,如果我們已經有Spring用於依賴注入,那麼為什麼我們需要Guice?好吧,如果你只需在應用程式中實現依賴注入,那麼你無需使用Spring容器。Spring不僅僅是一個依賴注入框架,二期大多數Spring應用都使用了XML作為依賴注入的方式。而Guice卻是一個相對更輕量級的框架,它的整合更少,有Java例項配置和執行時繫結。通過使用Java繫結,可以獲得編譯時的型別檢查和IDE自動完成功能。
Guice框架的執行速度也很快。預設情況下,Guice為每一個依賴(對應Spring的“prototype”範圍)注入一個新的、單獨的物件例項,而Spring則預設提供單態例項。Guice框架將依賴注入提升到一個新的水平,充分利用Java型別的所有功能,特別是註釋和泛型,使得構建的DI應用程式更加模組化,更容易編寫,並且錯誤更少、易於維護。
一、下載Google Guice
Google Guice的Maven依賴如下:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency>
也可以從Github下載,見:https://github.com/google/guice
要執行基於Guice的應用程式,有三個依賴包是必須的:
- guice-3.0.jar
- javax.inject.jar
- aopalliance.jar
二、實戰示例
下面建立一個簡單的Java程式,使用Guice實現依賴注入。
1、服務介面類ArithmeticService.java
public interface ArithmeticService {
void calculate(int a, int b);
}
2、服務介面實現類AdditionService.java
public class AdditionService implements ArithmeticService {
@Override
public void calculate(int a, int b) {
System.out.println("Addition of " + a + " and " + b + " is: " + (a + b));
}
}
3、另一個服務介面實現類SubtractionService.java
public class SubtractionService implements ArithmeticService {
@Override
public void calculate(int a, int b) {
System.out.println("Subtraction of " + a + " and " + b + " is: " + (a - b));
}
}
4、第三個服務介面實現類MultiplicationService.java
public class MultiplicationService implements ArithmeticService {
@Override
public void calculate(int a, int b) {
System.out.println("Multiplication of " + a + " and " + b + " is: " + (a * b));
}
}
5、第四個服務介面實現類DivisionService.java
public class DivisionService implements ArithmeticService {
@Override
public void calculate(int a, int b) {
System.out.println("Divisiton of " + a + " and " + b + " is: " + (a / b));
}
}
6、Consumer Class
import javax.inject.Inject;
public class MyApplication {
private ArithmeticService service;
// constructor based injection
// @Inject
// public MyApplication(ArithmeticService service){
// this.service=service;
// }
// setter method injection
@Inject
public void setService(ArithmeticService service) {
this.service = service;
}
public void calculate(int a, int b) {
service.calculate(a, b);
}
}
Guice框架既支援基於構造方法的注入方式,也支援基於setter的注入方式。在上面的例子中,使用了基於setter的注入方式,並註釋了基於構造方法的注入方式。
7、繫結服務實現
Google Guice框架需要知道要使用哪一個服務的實現類,因此必須配置它——通過繼承AbstractModule類,併為configure()方法提供一個實現物件。如下:
import com.google.inject.AbstractModule;
public class GuiceInjector extends AbstractModule {
@Override
protected void configure() {
bind(ArithmeticService.class).to(AdditionService.class);
// bind(ArithmeticService.class).to(MultiplicationService.class);
// bind(ArithmeticService.class).to(DivisionService.class);
// bind(ArithmeticService.class).to(SubtractionService.class);
}
}
注意在上面的配置中,我已經將服務繫結到AdditionService實現類上。我們可以將繫結任一實現類到服務介面。如果將來要使用不同的服務實現,如SubtractionService或MultiplicationService,只需更改上述檔案中的繫結。而無需修改客戶端應用程式。
8、客戶端應用程式
下面寫一個客戶端示例程式。
import com.google.inject.Guice;
import com.google.inject.Injector;
public class ClientApplication {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new GuiceInjector());
MyApplication app = injector.getInstance(MyApplication.class);
app.calculate(1, 2);
}
}
這裡我們使用Guice類的createInjector()方法建立了一個Injector物件,並傳遞了我們自定義的注入器實現類的物件。然後使用注入器物件的getInstance()方法來建立一個服務消費類(MyApplication)的例項。在建立MyApplication物件時,Guice框架會自動注入其依賴的服務類實現(這裡為AdditionService)。下面是執行程式碼的輸出:
Addition of 1 and 2 is: 3
還可以使用Google Guice來建立一個沒有配置注入器的服務類(也即繫結服務類實現),如下:
import com.google.inject.Guice;
import com.google.inject.Injector;
public class ClientApplication {
public static void main(String[] args) {
Injector injector = Guice.createInjector();
AdditionService addService = injector.getInstance(AdditionService.class);
SubtractionService subService = injector.getInstance(SubtractionService.class);
MultiplicationService mulService = injector.getInstance(MultiplicationService.class);
DivisionService divService = injector.getInstance(DivisionService.class);
addService.calculate(1, 2);
subService.calculate(10, 5);
mulService.calculate(5, 2);
divService.calculate(4, 2);
}
}
如上面的例子所示,沒有使用像GuiceInjector這樣的自定義注入器類。執行上面的程式碼,將產生以下輸出:
Addition of 1 and 2 is: 3
Subtraction of 10 and 5 is: 5
Multiplication of 5 and 2 is: 10
Divisiton of 4 and 2 is: 2
這就是Java語言的Google Guice框架。
相關文章
- 本地開發、兩層開發、三層開發與分散式開發分散式
- 敏捷開發--Scrum開發模型敏捷Scrum模型
- 開發人員愛開發
- Spark開發-SparkSql的開發SparkSQL
- struts開發OA合作開發
- 軟體開發:app軟體開發,pc端軟體開發,微商城/小程式開發APP
- 開發
- 原生開發、H5開發和混合開發的區別H5
- 淺談軟體開發模型之瀑布開發和敏捷開發模型敏捷
- 即拼商城APP開發(開發APP)APP
- Flutter開發之Flutter外掛開發Flutter
- 軟體開發新模式:敏捷開發模式敏捷
- 教育app開發需要開發哪些功能APP
- 多端開發之uniapp開發appAPP
- [ Office 365 開發系列 ] 開發模式分析模式
- 【敏捷開發】驅動測試開發敏捷
- WEB開發經典文章-開發秘方Web
- 開發中所使用的開發環境開發環境
- 主流開發語言和開發環境開發環境
- OLE程式開發利用(開發EXCEL) (轉)Excel
- [新手開發記錄] 從測試開始開發
- 七牛雲端儲存--北京研發中心招聘(Golang開發、測試開發、前端開發)Golang前端
- 物聯網【專案開發】開源系統開發
- 教育直播系統開發APP開發(需求)APP
- CXF開發及與Spring整合開發Spring
- Flutter外掛開發《iOS原生模組開發》FlutteriOS
- 論萌新開發與大佬開發的不同?
- Weex開發之路(一):開發環境搭建開發環境
- Weex開發之路(1):開發環境搭建開發環境
- 微信開發之JSSDK介面開發(Java)JSJava
- 從開發框架提高開發效率說起框架
- 會開發和懂開發的區別
- 全端開發之“兩端開發策略”
- iOS開發框架MVVM 1理解開發模式iOS框架MVVM模式
- iOS開發系列--IOS程式開發概覽iOS
- java開發——我的開發環境薦Java開發環境
- PHP開發工具、開發環境彙總PHP開發環境
- [Android開發]Mac下NDK開發(JNI)AndroidMac