[英]Real Life Scenarios to use ScriptEngineManager in Java
我知道我們可以使用ScriptEngineManager執行腳本,例如:Java腳本。
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
public class Test {
public static void main(String[] args) throws Exception{
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String foo = "40+2";
System.out.println(engine.eval(foo));
}
}
但這是一個非常簡單的示例,我不確定在哪種實際情況下可以使用ScriptEngineManager? 請詳細說明。
有許多可能的用途。 例如:自動化。 Microsoft Office程序以及Adobe Photoshop都可以運行腳本以自動執行程序的功能。 您可以將Java腳本引擎API用於Java應用程序中的類似內容。
我曾在一個項目中使用過它,我們的軟件必須執行一些復雜的數據處理。 可以通過運行腳本來自定義處理的某些部分。 這樣做的好處是可以輕松修改腳本。 如果我們將用Java編寫自定義處理程序,這意味着每次需要進行一些小更改時,我們都將不得不重新構建一個全新的系統。
讓我嘗試從項目角度回答這個問題。 我們有一個框架,它將進行出站調用,並允許集成商從json響應中提取部分並將其映射到內部數據模型中。
這完全是由元數據驅動的,集成商使用jsonpath(類似於xpath,但對於json)來指定要提取的內容以及將其映射到的內容。
但是有時候,集成商希望有條件地指定其中的一些。 例如,如果提取的json值為null,則我希望模型具有0。如果數組長度為0,則我想使用某些值。
我們將這些邏輯公開為javascript。 我們使用此引擎執行javascript,以找出inetgrator想要對數據做些什么(基本上,我們對獲得的數據執行集成商提供的腳本,並在模型上設置該值,最終將其持久化)
希望這能回答您的問題。
考慮到這些差異,Java是靜態類型的,這意味着用Java編寫的程序會先編譯然后運行,但是對於動態類型的語言(例如JavaScript和Python),我們甚至可以執行程序的一部分,因為它不是整體上如此匯編。 談到這個問題,假設您有一台服務器(例如:WildFly)在其上部署了應用程序。 現在,構建和托管是一個耗時的過程,因此,如果必須進行一些小的更改,則必須重新構建它,然后再次執行該耗時的過程,但是如果可以就地使用任何動態類型的語言(例如JavaScript)其中,它不會花費時間,並且在下一個實現中,您已經准備好使用更新的代碼。 這是使用JS的主要優點,因此ScriptEngine已添加到JSR中。
目前,我正在與JBoss合作,將ScriptEngine功能添加到其WildFly服務器,因此一直在實時花費時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.