java可用的动态脚本引擎和动态代码执行

您所在的位置:网站首页 java执行js脚本 java可用的动态脚本引擎和动态代码执行

java可用的动态脚本引擎和动态代码执行

2024-06-26 06:41:11| 来源: 网络整理| 查看: 265

文章目录 1、javascript语法引擎1.1、rhino1.2、nashorn1.3、j2v8 2、Java语法引擎2.1、Groovy

java的ScriptEngine脚本引擎,支持代码动态执行,代码修改后不需要重启JVM进程,就可以使用解析或编译方式执行,非常方便,在动态业务规则、热更新、热修复等场景中会非常方便。 本文介绍3个支持javascript语法和1个支持java语法和脚本引擎。

1、javascript语法引擎

支持运行javascript语法的脚本引擎,主要有三个:

1.1、rhino

官网:https://github.com/mozilla/rhino Rhino是JavaScript 的一种基于Java的实现,由Mozilla开发,JDK6和JDK7已集成,其它版本JDK需要添加依赖包。 pom.xml

org.mozilla rhino-engine 1.7.14

使用例子

package com.penngo.script; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class RhinoTest { public static void main(String[] args) throws Exception{ String js = """ function add (a, b) { var sum = a + b; // js调用java类 java.lang.System.out.println("Script sum=" + sum); return java.lang.Integer.valueOf(sum); } """; //获得脚本引擎 ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByName("rhino"); engine.eval(js); Invocable jsInvoke = (Invocable) engine; //java中调用js Object result = jsInvoke.invokeFunction("add", new Object[] { 13.1, 20.1 }); System.out.println("Rhino result=" + result); } }

运行结果:

Script sum=33.2 Rhino result=33 1.2、nashorn

官网:https://github.com/openjdk/nashorn 在JDK8-JDK13,Nashorn取代Rhino成为Java的内置集成JavaScript引擎,Nashorn完整支持ECMAScript 5.1的规范以及一些扩展。在JDK8-JDK13外的版本需要添加依赖包: pom.xml

org.openjdk.nashorn nashorn-core 15.4

使用例子

package com.penngo.script; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class NashornTest { public static void main(String[] args) throws Exception{ String js = """ // js调用java var Integer = Java.type("java.lang.Integer"); var System = Java.type("java.lang.System"); function add (a, b) { var sum = a + b; System.out.println("Script sum=" + sum); return Integer.valueOf(sum); } """; ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByName("nashorn"); engine.eval(js); Invocable jsInvoke = (Invocable) engine; //java中调用js Object result = jsInvoke.invokeFunction("add", new Object[] { 13.1, 20.1 }); System.out.println("Nashorn result=" + result); } }

运行结果:

Script sum=33.2 Nashorn result=33 1.3、j2v8

官网:https://github.com/eclipsesource/j2v8 J2V8是一套针对谷歌浏览器chrome的V8 Javascript引擎的java绑定,支持在Android、Windows、Linux、MacOS上运行,需要根据不同平台使用不同时依赖包:

com.eclipsesource.j2v8 j2v8_win32_x86_64 4.6.0

不同平台的依赖包

j2v8_linux_x86_64j2v8_win32_x86_64j2v8_win32_x86j2v8_android_x86j2v8_android_armv7lj2v8_macosx_x86_64 2、Java语法引擎 2.1、Groovy

官网: http://groovy-lang.org/ https://github.com/groovy Groovy是在Java虚拟机上实现的动态语言,提供了动态将java代码编译为Java Class对象的功能。需要添加依赖包 pom.xml

org.codehaus.groovy groovy-all 3.0.14 pom

使用例子

package com.penngo.script; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyObject; public class GroovyTest { public static void main(String[] args) throws Exception{ GroovyClassLoader loader = new GroovyClassLoader(); // java代码 String java = """ public class Test01 { public int add(double a, double b) { double sum = a + b; System.out.println("Script sum=" + sum); return sum.intValue(); } } """; Class scriptClass = loader.parseClass(java); GroovyObject scriptInstance = (GroovyObject) scriptClass.getDeclaredConstructor().newInstance(); Object result = scriptInstance.invokeMethod("add", new Object[]{13.1,20.1}); System.out.println("Groovy result=" + result); } }

运行结果

Script sum=33.2 Groovy result=33

本文测试源码



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭