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

1. 代码结构

2. 实现结果测试

2.1 JS代码

@Testpublic 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代码

 @Testpublic 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文件

@Testpublic 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();}}

Java封装动态编译相关推荐

  1. 【java】深入理解Java的动态编译

    文章目录 1.概述 2. 前提 3. 基本原理# 4. JDK动态编译 4.1 实现JavaFileObject 4.2 实现ClassLoader 4.3 实现JavaFileManager 4.4 ...

  2. java autoconf_PHP动态编译出现Cannot find autoconf

    在安装完PHP后,想动态编译PHP的memcache扩展库cdmemcache-2.2.5//usPHP 在安装完PHP后,想动态编译PHP的memcache扩展库 cd memcache-2.2.5 ...

  3. java 反射 动态编译_动态编译java源代码和反射调用问题

    我从教程中得到了以下代码: package com.tom.labs; import java.io.IOException; import java.lang.reflect.Method; imp ...

  4. JAVA中动态编译的简单使用

    一.引用库 pom文件中申明如下: <dependencies><!-- https://mvnrepository.com/artifact/junit/junit -->& ...

  5. Java动态编译优化——URLClassLoader 内存泄漏问题解决

    一.动态编译案例 要说动态编译内存泄漏,首先我们先看一个案例(网上搜动态编译的资料是千篇一律,只管实现功能,不管内存泄漏,并且都恬不知耻的标识为原创!!) Java  URLClassLoader 动 ...

  6. java 动态字符串_Java动态编译执行一串字符串,类似于Javascript里的eval函数

    Javascript里的eval函数能动态执行一串js脚本. 那Java里怎么做到呢. 有两种方法: 一种是使用可以执行js脚本的Java类 ScriptEngineManagerpublic sta ...

  7. Java动态编译执行

    在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码.JAVA API提供了相应的工具(JavaCompiler)来实现动态编译.下面我们通过一个简单的例子介绍,如何通过JavaCo ...

  8. 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)

    菜鸟学习笔记:Java提升篇12(Java动态性2--动态编译.javassist字节码操作) Java的动态编译 通过脚本引擎执行代码 Java字节码操作 JAVAssist的简单使用 常用API ...

  9. 动态编译和静态编译及Java执行

    静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了.你写小程序没问题,但程序一大,加载的过程(就是当你运行程序时初始化的过程)就比较费力了..大多数 ...

最新文章

  1. 2、安装ICS(Internet Component Suite)控件
  2. java关闭当前窗口打开另一窗口
  3. Console.WriteLine在以Windows Application方式下编译会产生性能问题
  4. 开始计算机USB存储功能,USB存储设备禁用怎么设置
  5. 部署项目到jetty
  6. java xy x y_为什么该语句在Java中不起作用x ^ = y ^ = x ^ = y;
  7. Java描述设计模式(06):建造者模式
  8. 使用跟踪和调试进行条件编译
  9. 红帽linux安装显卡驱动,RedHat Enterprise Linux 6 安装ATI显卡驱动
  10. Windows Server 2008 故障转移群集简介
  11. php存库,php – 使用Laravel实现存储库模式
  12. 基于Python实现的DHT嗅探器
  13. Java编程练习题3
  14. 单价数量和总价的公式_总价数量单价的数量关系式
  15. 麒麟V10系统安装教程
  16. Unity_回合制战斗系统_01
  17. 面试必备:《Java 最常见 200+ 面试题全面解析》
  18. 自然科学类计算机,自然科学基金委员会
  19. crm自动编号(第二天再次001从开始)
  20. 纷享销客CRM为虎邦辣酱的第二次增长插上数字化翅膀

热门文章

  1. 虹膜识别门禁,筑起智能安防首道屏障
  2. 【物联网学习笔记——人人学IoT系列】一、初识物联网
  3. 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f608' in position。。。
  4. CMOS相机和CCD相机之间的像素合并(Binning)的区别
  5. android 动态改变进度条,Android条纹进度条的实现(调整view宽度仿进度条)
  6. 用python抓取小说,以龙王传说为例
  7. 阿里巴巴今晚发布财报 2019财年全年业绩也将一并公布
  8. 这两天不爽——公车上被误认为色狼、游泳撞破上嘴唇
  9. aardio 谷歌浏览器自动化 (三) 等待
  10. 高数叔数学建模学习笔记(1)