Java封装动态编译

Java封装动态编译java 实现字符串的动态编译

最近根据公司的业务需要通过前端页面传过来字符串的代码,并且通过动态编译然后执行,支持的类型为 JSJava字符串class文件 的方式,由于实现的方式都各不相同,所以进行统一封装一下

1. 代码结构

在这里插入图片描述

2. 实现结果测试

2.1 JS代码

@Test public void test_Js_compile() throws ScriptException, NoSuchMethodException, InterruptedException { 
    CompletableFuture.runAsync(() -> { 
    String str = "function bbb() { print(a); return a}; bbb()"; Map<String, Object> map = new HashMap<>(); map.put("a", "hello world"); DynamicCompileWrapper<?> scriptEngine = DynamicCompileFactory.getScriptEngine(DynamicCompileType.JS); try { 
    scriptEngine.execFunction(str, map); } catch (DynamicCompileException e) { 
    e.printStackTrace(); } }); CompletableFuture.runAsync(() -> { 
    String str = "function bbb() { print(a); return a}; "; Map<String, Object> map = new HashMap<>(); map.put("a", "hello world2"); DynamicCompileWrapper<?> scriptEngine = DynamicCompileFactory.getScriptEngine(DynamicCompileType.JS); try { 
    scriptEngine.execFunctionForMethodName(str, "bbb", map); } catch (Exception e) { 
    e.printStackTrace(); } }); Thread.currentThread().join(); } 

在这里插入图片描述

2.2 Java代码

 @Test public void test_java_compile() throws ClassNotFoundException, InvocationTargetException, IllegalAccessException, NoSuchMethodException { 
    String code = "public class HelloWorld {\n" + " public void add(String a) {System.out.println(a);}\n" + " \n" + "}"; DynamicCompileWrapper<JavaCompile> scriptEngine = (DynamicCompileWrapper<JavaCompile>) DynamicCompileFactory.getScriptEngine(DynamicCompileType.JAVA); JavaCompile engine = scriptEngine.getScriptEngine(code); engine.runMethod("add", "hello"); } 

在这里插入图片描述

2.3 Java文件

@Test public void test_java_file() { 
    File file = new File("E:\\my-study-project\\practice\\src\\main\\java\\com\\zhj\\demo\\tls\\Tlsdemo.java"); JavaCompile javaCompile = null; try { 
    FileInputStream inputStream = new FileInputStream(file); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] bytes = new byte[1024]; int tempChar; while ((tempChar = inputStream.read(bytes)) != -1) { 
    outputStream.write(bytes, 0, tempChar); } javaCompile = createInstance().getScriptEngine(new String(outputStream.toByteArray(), StandardCharsets.UTF_8)); javaCompile.runMainMethod(new String[]{ 
    }); } catch (Exception e) { 
    e.printStackTrace(); } } 

在这里插入图片描述

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215300.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:13
下一篇 2026年3月18日 下午2:13


相关推荐

  • 四周第三次课(4月13日)

    四周第三次课(4月13日)

    2022年4月2日
    43
  • Json文件格式化方法

    Json文件格式化方法vscode 编辑器功能非常强大 是最好用的编辑器之一 那么对于一个 json 文件 如果没有很美观的展示 那是相当讨厌的

    2026年3月18日
    2
  • 堆栈指针寄存器-SP详解

    堆栈指针寄存器-SP详解基本概念 堆栈指针寄存器 SP 是什么 答 堆栈是计算机存储数据的一种数据结构 SP 的作用就是指示当前要出栈或入栈的数据 并在操作执行后自动递增或递减 至于是入栈递增还是入栈递减 就是由 CPU 的生产厂家确定 通常由一块存储区和指向该存储区的指针 SP 构成 1 在堆栈中保存数据叫入栈 压栈 从堆栈中读取数据叫出栈 2 堆栈是一种具有 先进后出 后进先出 LIFO

    2026年3月17日
    2
  • 无锁编程实例

    无锁编程实例最近在研究nginx的自旋锁的时候,又见到了GCCCAS原子操作,于是决定动手分析下CAS实现的无锁到底性能如何,网上关于CAS实现无锁的文章很多,但少有研究这种无锁的性能提升的文章,这里就以实验结果和我自己的理解逐步展开。1.什么是CAS原子操作在研究无锁之前,我们需要首先了解一下CAS原子操作——Compare&Set,或是Compare&Swap,现在

    2022年6月3日
    33
  • SQL Server基本操作练习「建议收藏」

    SQL Server基本操作练习「建议收藏」代码实现:use test_0425goselect *from student– 查专业是什么学的select *from studentwhere stspecialty like’%学’– 查分72-87的 并且 专业是什么文的select *from studentwhere stscore like ‘[7-8][2-7]’ and stspecialty …

    2022年8月18日
    8
  • matcher java_Java Matcher类详解

    matcher java_Java Matcher类详解首页 gt 基础教程 gt 正则表达式 gt Matcher 类 JavaMatcher 类详解 Matcher 对象是一个状态机器 它依据 Pattern 对象做为匹配模式对字符串展开匹配检查 此类的实例用于多个并发线程是不安全的 定义 publicfinalc 构造器 Matcher Patter

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号