【鄭州java培訓:Java腳本API】我們不需要將動態語言編譯為 Java字節碼就可以在 Java 應用程序中使用它們。使用 Java Platform, Standard Edition 6 (Java SE)中添加的腳本包(并且向后兼容 Java SE 5),Java 代碼可以在運行時以一種簡單的、統一的方式調用多種動態語言。本系列文章共分兩個部分,第 1 部分將介紹 Java 腳本 API 的各種特性。文章將使用一個簡單的 Hello World 應用程序展示 Java 代碼如何執行腳本代碼以及腳本如何反過來執行 Java 代碼。第 2 部分將深入研究 Java 腳本 API 的強大功能。
Java 開發人員清楚 Java 并不是在任何情況下都是最佳的語言。今年電子期刊,1.0 版本的 JRuby 和 Groovy 的發行引領了一場熱潮,促使人們紛紛在自己的 Java 應用程序中添加動態語言。Groovy、JRuby、Rhino、Jython 和一些其他的開源項目使在所謂的腳本語言中編寫代碼并在 JVM 中運行成為了可能(請參閱 參考資料)。通常,在 Java 代碼中集成這些語言需要對各種解釋器所特有的 API 和特性有所了解。
Java SE 6 中添加的 javax.script 包使集成動態語言更加容易。通過使用一小組接口和具體類,這個包使我們能夠簡單地調用多種腳本語言。但是,Java 腳本 API 的功能不只是在應用程序中編寫腳本;這個腳本包使我們能夠在運行時讀取和調用外部腳本,這意味著我們可以動態地修改這些腳本從而更改運行應用程序的行為。
Java 腳本 API
腳本與動態的對比
術語腳本 通常表示在解釋器 shell 中運行的語言,它們往往沒有單獨的編譯步驟。術語動態 通常表示等到運行時判斷變量類型或對象行為的語言,往往具有閉包和連續特性。一些通用的編程語言同時具有這兩種特性。此處首選腳本語言 是因為本文的著重點是 Java 腳本 API,而不是因為提及的語言缺少動態特性。
2006 年 10 月,Java 語言添加了腳本包,從而提供了一種統一的方式將腳本語言集成到 Java 應用程序中去。對于語言開發人員,他們可以使用這個包編寫粘連代碼(glue code),從而使人們能夠在 Java 應用程序中調用他們的語言。對于 Java 開發人員,腳本包提供了一組類和接口,允許使用一個公共 API 調用多種語言編寫的腳本。因此,腳本包類似于不同語言(比如說不同的數據庫)中的 Java Database Connectivity (JDBC) 包,可以使用一致的接口集成到 Java 平臺中去。
以前,在 Java 代碼中,動態調用腳本語言涉及到使用各種語言發行版所提供的獨特類或使用 Apache 的 Jakarta Bean Scripting Framework (BSF)。BSF 在一個 API 內部統一了一組腳本語言(請參閱 參考資料)。使用 Java SE 6 腳本 API,二十余種腳本語言(AppleScript、Groovy、JavaScript、Jelly、PHP、Python、Ruby 和 Velocity)都可以集成到 Java 代碼中,這在很大程序上依賴的是 BSF。
腳本 API 在 Java 應用程序和外部腳本之間提供了雙向可見性。Java 代碼不僅可以調用外部腳本,而且還允許那些腳本訪問選定的 Java 對象。比如說,外部 Ruby 腳本可以對 Java 對象調用方法,并訪問對象的屬性,從而使腳本能夠將行為添加到運行中的應用程序中(如果在開發時無法預計應用程序的行為)。
調用外部腳本可用于運行時應用程序增強、配置、監控或一些其他的運行時操作,比如說在不停止應用程序的情況下修改業務規則。腳本包可能的作用包括:
·在比 Java 語言更簡單的語言中編寫業務規則,而不用借助成熟的規則引擎。
·創建插件架構,使用戶能夠動態地定制應用程序。
·將已有腳本集成到 Java 應用程序中,比如說處理或轉換文件文章的腳本。
·使用成熟的編程語言(而不是屬性文件)從外部配置應用程序的運行時行為。
·在 Java 應用程序中添加一門特定于域的語言(domain-specific language)。
·在開發 Java 應用程序原型的過程中使用腳本語言。
·在腳本語言中編寫應用程序測試代碼。
你好,腳本世界
HelloScriptingWorld 類(本文中的相關代碼均可從 下載部分 獲得)演示了 Java 腳本包的一些關鍵特性。它使用硬編碼的 JavaScript 作為示例腳本語言。此類的 main() 方法(如清單 1 所示)將創建一個 JavaScript 腳本引擎,然后分別調用五個方法(在下文的清單中有顯示)用于突出顯示腳本包的特性。