[TOC]
# 1. Java 平臺的腳本機制
|技術邊界|Java支持腳本語言調用Java類或方法,將Java嵌入到腳本語言中使用|
|:-:|:-|
|特性|擴展性:可以自定義腳本語言<br>簡單易用:腳本語言簡單易學<br>動態性:可以動態調用Java方法<br>交互性:可以在腳本語言的REPL中調用Java|
|使用場景|需要提供自定義的DSL或命令<br>需要簡單易用的開發環境<br>需要動態調用或交互<br>需要嵌入到其它語言或應用中|
|應用方法|實現ScriptEngine和ScriptEngineFactory<br>設計腳本語言的語法<br>讀取和執行腳本程序<br>在腳本中調用Java類或方法|
> ## Java腳本機制與項目中的結構關系:
|項目結構|腳本機制接口|
|:-:|:-|
|Java源碼|.java文件:包含ScriptEngine及其工廠的實現|<br>Java類和方法:供腳本調用|
|編譯生成|.class文件:編譯Java源碼生成|<br>無其他生成物|
|項目部署|.class文件:部署Java類|<br>腳本文件(可選):部署腳本源文件|
> ## Java腳本機制實現關鍵流程:
|流程|描述|
|:-:|:-|
|實現ScriptEngine|實現腳本引擎,可定義語法、執行腳本等|
|實現ScriptEngineFactory|工廠類,用于創建和管理ScriptEngine實例|
|設計腳本語言語法(可選)|自定義腳本語言的語法、結構等(可選)|
|讀取和執行腳本|通過ScriptEngine讀取和執行腳本程序|
|在腳本中調用Java|在腳本中調用Java提供的類或方法|
|提供交互式SHELL(可選)|提供一個讀取-執行-打印循環的交互界面(可選)|
> ## 總結:
Java的腳本機制允許自定義腳本語言,并在腳本中調用Java類或方法。其關鍵是實現ScriptEngine和ScriptEngineFactory,設計語言語法(可選),并在腳本中調用Java。腳本機制可以擴展語言,提供簡單的開發環境,實現動態或交互調用,被嵌入到其它語言或應用中使用。
# 2. 示例
這里是一個使用Java腳本機制的示例,包含一個簡單的腳本引擎和交互式SHELL:
ScriptEngine實現:
```
java
public class SimpleScriptEngine extends AbstractScriptEngine {
// 執行腳本源碼
@Override
public Object eval(String source, ScriptContext context) {
// 簡單的語法:每行是一個表達式
String[] lines = source.split("\n");
for (String line : lines) {
// 計算每行表達式并打印結果
Object result = calc(line);
context.getWriter().println(result);
}
return null;
}
// 簡單的表達式計算器
private Object calc(String expr) {
// 使用ScriptEngine作為上下文調用Java方法
ScriptEngine engine = this;
return engine.eval(expr);
}
}
```
> ## ScriptEngineFactory實現:
```
java
public class SimpleScriptEngineFactory implements ScriptEngineFactory {
// 返回SimpleScriptEngine實例
@Override
public ScriptEngine getScriptEngine() {
return new SimpleScriptEngine();
}
@Override
public String getEngineName() {
return "Simple";
}
// ... 省略其它實現 ...
}
```
> ## 交互式SHELL:
```
java
public class SimpleShell {
public static void main(String[] args) {
// 獲取ScriptEngine
ScriptEngine engine = new SimpleScriptEngineFactory().getScriptEngine();
// 讀取-執行-打印循環
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print(">>> ");
String line = scanner.nextLine();
if ("exit".equals(line)) {
break;
}
engine.eval(line);
}
}
}
```
> ## 執行SimpleShell,在其中調用SimpleScriptEngine執行腳本:
```
>>> 1 + 2
3
>>> Math.random()
0.123
>>> exit
```
> ## 注釋:
- 實現ScriptEngine和ScriptEngineFactory
- 設計簡單的腳本語法,每行是一個表達式
- 在eval方法中執行腳本,并在腳本中調用Java方法
- 提供一個交互式SHELL,讀取-執行-打印循環
- 執行腳本并調用Java方法,實現動態交互
這個示例演示了使用Java腳本機制定制腳本語言并提供交互式SHELL的過程。通過實現ScriptEngine和ScriptEngineFactory,可以自定義語言結構,并在腳本中調用Java方法。
- 系統設計
- 需求分析
- 概要設計
- 詳細設計
- 邏輯模型設計
- 物理模型設計
- 產品設計
- 數據驅動產品設計
- 首頁
- 邏輯理解
- 微服務架構的關系數據庫優化
- Java基礎架構
- 編程范式
- 面向對象編程【模擬現實】
- 泛型編程【參數化】
- 函數式編程
- 響應式編程【異步流】
- 并發編程【多線程】
- 面向切面編程【代碼復用解耦】
- 聲明式編程【注解和配置】
- 函數響應式編程
- 語法基礎
- 包、接口、類、對象和切面案例代碼
- Springboot按以下步驟面向切面設計程序
- 關鍵詞
- 內部類、匿名類
- 數組、字符串、I/O
- 常用API
- 并發包
- XML
- Maven 包管理
- Pom.xml
- 技術框架
- SpringBoot
- 項目文件目錄
- Vue
- Vue項目文件目錄
- 遠程組件
- 敏捷開發前端應用
- Pinia Store
- Vite
- Composition API
- uniapp
- 本地方法JNI
- 腳本機制
- 編譯器API
- 注釋
- 源碼級注釋
- Javadoc
- 安全
- Swing和圖形化編程
- 國際化
- 精實或精益
- 精實軟件數據庫設計
- 精實的原理與方法
- 項目
- 零售軟件
- 擴展
- 1001_docker 示例
- 1002_Docker 常用命令
- 1003_微服務
- 1004_微服務數據模型范式
- 1005_數據模型
- 1006_springCloud
- AI 流程圖生成
- Wordpress_6
- Woocommerce_7
- WooCommerce常用的API和幫助函數
- WooCommerce的鉤子和過濾器
- REST API
- 數據庫API
- 模板系統
- 數據模型
- 1.Woo主題開發流程
- Filter
- Hook
- 可視編輯區域的函數工具
- 渲染字段函數
- 類庫和框架
- TDD 通過測試來驅動開發
- 編程范式對WordPress開發
- WordPress和WooCommerce的核心代碼類庫組成
- 數據庫修改
- 1.WP主題開發流程與時間規劃
- moho
- Note 1
- 基礎命令