日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java封装动态编译

發布時間:2024/3/26 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java封装动态编译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近根據公司的業務需要通過前端頁面傳過來字符串的代碼,并且通過動態編譯然后執行,支持的類型為 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封装动态编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。