groovy就其本身而言,在不同的場景下都算是一門非常不錯的程式設計語言,特别是在與java混用的環境下,groovy顯得更加強大。出于這種考慮,groovy被設計成非常輕量級,并且易于嵌入到任何java應用系統中。
目前主要有3種方法将groovy與java內建起來,細節會在下文中讨論。
還有一種可選方案是,如果你确實需要使用其他腳本語言,可以利用bean scripting framework将任何腳本語言內建到你的java代碼中(雖然我們難以想象這麼做的原因)。
利用shell執行腳本或者表達式
你可以使用groovyshell執行groovy中的任何表達式或者腳本。
groovyshell允許你通過binding對象傳進和傳出變量。
将groovy腳本繼承自一個你選擇的基類,之後便可以通路腳本的正常方法,這種做法往往非常有用。可以通過在編譯配置中設定腳本基類屬性,并将新的編譯配置傳遞給shell完成這一操作。
你可以在java代碼中直接使用groovyclassloader動态地加載和執行groovy類。java代碼如下:
如果你想在java裡使用一個接口,但是接口的實作在groovy腳本中,可以這樣:
如果這個groovy類實作了接口myinterface,這麼做是沒有問題的。從現在開始myobject可以像其他實作了myinterface接口的類一樣使用。
需要注意的一點是,parseclass 方法會從你的字元串檔案名中建立一個對象。另一個gcl.parseclass的用法是:
完整的例子如下所示:
請注意,所有的異常處理都已經被移除了,你不必在java類中關心這個。實際上我會在一個工具類中完成groovy的接口調用。
如果開發人員想把groovy腳本嵌入到伺服器内,并且在腳本變更之後也能夠重新加載,groovyscriptengine是一個主要的解決方案。你可以使用一個classpath集合(url或者路徑名稱)初始化groovyscriptengine,之後便可以執行這些路徑中的groovy腳本了。groovyscriptengine同樣可以跟蹤互相依賴的腳本,如果其中一個被依賴的腳本發生變更,則整個腳本樹都會被重新編譯和加載。
此外,每次腳本的執行,還可以利用一個腳本可以通路的包含了最新參數的binding對象傳遞資訊。例子如下:
輸出是“hello, world!”。