2017-07-30 57 views
0

我正在實現面向服務的體系結構系統。我的系統中有一些類與外部API對話,所以當我啓動我的程序時,必須有一些方法可以實例化這些類,以便每次有人發送請求時都不必實例化它們。我想知道Google Guice是否會有類似的東西,但到目前爲止,我發現Google Guice非常適合爲界面選擇實現類,以及按需實例化。如何使用Google Guice在開始時實例化一個類

爲了讓我的問題更清晰一些,比方說ClassAPIUser是調用外部API的類,它是我想在開始時實例化的類(static void main方法)。假設ClassCaller有一個ClassAPIUser字段。我想找到一種方法,讓我可以告訴我的程序來從main方法的已實例化ClassAPIUser(入口點):

> public class ClassCaller { 
> 
> private ClassAPIUser classAPIUser; 
> 
> // Constructor 
> public ClassCaller (ClassAPIUser classAPIUser) { 
>  this.classAPIUser = classAPIUser; 
> } 
> } 

有沒有一種方法,我可以使用谷歌吉斯讓ClassCaller知道classAPIUser是在靜態void main方法中實例化的類?另外,我應該在靜態void main方法中指定什麼以及如何在靜態void main方法中實例化ClassAPIUser?

回答

0

默認情況下,Guice在每次提供一個值時都會返回一個新實例。這種行爲可以通過作用域進行配置。作用域允許您在應用程序(@Singleton),會話(@SessionScoped)或請求(@RequestScoped)的整個生命週期中重用實例。 Guice包含一個定義Web應用程序範圍的servlet擴展。自定義範圍可以爲其他類型的應用程序編寫。

Singleton是你想要的。看看documentation

+1

或EagerSingleton如果他希望使用注入器創建實例而不是第一次使用。 https://github.com/google/guice/wiki/Scopes#eager-singletons。 – Gene

+0

問題 - 對於不擴展接口的類,這可能嗎?看起來像我看到的例子是實現接口的類。就我而言,這只是一個階級。 – tidbits

+0

當然。 (另外,請隨時接受答案:D) – NyxMC

相關問題