簡體   English   中英

在Java中使用ScriptEngineManager的真實場景

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM