2013-05-30 70 views
1

我想將GroovyConsole嵌入到現有的Java應用程序中,以實現設計原型和調試目的。嵌入式Groovy控制檯 - 如何共享整個狀態

我真的很喜歡這個控制檯可以訪問我的整個程序 - 大多數情況下,這意味着任何單身人士或工廠都應該返回實際的對象,而不是爲GroovyConsole的世界創建一個新的對象。

有沒有辦法做到這一點,或者我必須使用setVariable()調用一個接一個地手動傳遞所有對象嗎?

+0

您可以從[here](http://groovy.codehaus.org/Embedding+a+Groovy+Console+in+a+Java+Server+Application)獲得有用的輸入。 – dmahapatro

+0

如果我使用的是完美的彈簧。它非常接近,但由於我沒有使用spring,所以我沒有可以綁定的應用程序上下文。 –

回答

2

這實際上超級簡單。最有可能的是,你可以用no-arg構造函數創建一個新的控制檯,並且它會按你想要的方式運行。如果應用程序使用多個類加載器,只是通過在一個你想要的,當您創建控制檯實例:

def cl = ... //which ClassLoader you'll need depends on your application 
def console = new Console(cl) 
console.run() 

這將創建一個新的Groovy控制檯,並告訴它使用你想讓它什麼類加載器。這不會設置任何綁定或變量,但它確保控制檯正在使用的類與應用程序的其餘部分完全相同。如果您對應用程序中的類加載器沒有做任何特殊的處理,則簡單地調用新的Console()將導致它將當前的類加載器用作父類。

+0

你最後的陳述看起來不正確。我已經開始了一個沒有參數的新控制檯,並且沒有明確地分享它們而無法訪問應用程序其餘部分的對象,但我會再試一次。我猜其餘的都是正確的,並且在類加載器中傳遞會起作用。 –

+0

是的,只是檢查它。如果你傳入getClass()。getClassLoader(),你會得到我想要的,如果你不需要,它必須創建它自己的類加載器。謝謝您的幫助! –