精华内容
下载资源
问答
  • java动态代码执行

    2020-12-17 11:58:49
    基于groovy框架,进行的简单java动态代码执行;附件中包含java调用groovy具体的代码实现,及测试方法。
  • 在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码JAVAAPI提供了相应的工具(JavaCompiler)来实现动态编译。下面我们通过一个简单的例子介绍,如何通过JavaCompiler实现java代码动态编译。一、...

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

    一、获取JavaCompiler

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

    获取JDK提供的java编译器,如果没有提供编译器,则返回null;

    二、编译

    //获取java文件管理类

    StandardJavaFileManager manager = compiler.getStandardFileManager(null, null, null);

    //获取java文件对象迭代器

    Iterable extends JavaFileObject> it = manager.getJavaFileObjects(files);

    //设置编译参数

    ArrayList ops = new ArrayList();

    ops.add("-Xlint:unchecked");

    //设置classpath

    ops.add("-classpath");

    ops.add(CLASS_PATH);

    //获取编译任务

    JavaCompiler.CompilationTask task = compiler.getTask(null, manager, null, ops, null, it);

    //执行编译任务

    task.call();

    当我们要编译的源代码中,引用了其他代码,我们需要将引用代码路径设置到-classpath中,否则会编译失败。

    三、执行

    //要加载的类名

    String className = "xxx.xxx.xxx";

    //获取类加载器

    ClassLoader classLoader = XXX.class.getClassLoader();

    //加载类

    Class> cls = classLoader.loadClass(className);

    //调用方法名称

    String methodName = "execute";

    //方法参数类型数组

    Class>[] paramCls = {...};

    //获取方法

    Method method = cls.getDeclaredMethod(methodName , paramCls);

    //创建类实例

    Object obj = cls.newInstance();

    //方法参数

    Object[] params = {...};

    //调用方法

    Object result = method.invoke(obj, params);

    四、完整代码

    //ClassUtil.java

    import java.io.FileWriter;

    import java.io.BufferedWriter;

    import java.io.File;

    import java.io.IOException;

    import java.util.ArrayList;

    import javax.tools.JavaCompiler;

    import javax.tools.ToolProvider;

    import javax.tools.JavaFileObject;

    import javax.tools.StandardJavaFileManager;

    import org.apache.commons.logging.Log;

    import org.apache.commons.logging.LogFactory;

    public class ClassUtil {

    private static final Log logger = LogFactory.getLog(ClassUtil.class);

    private static JavaCompiler compiler;

    static{

    compiler = ToolProvider.getSystemJavaCompiler();

    }

    /**

    * 获取java文件路径

    * @param file

    * @return

    */

    private static String getFilePath(String file){

    int last1 = file.lastIndexOf('/');

    int last2 = file.lastIndexOf('\\');

    return file.substring(0, last1>last2?last1:last2)+File.separatorchar;

    }

    /**

    * 编译java文件

    * @param ops 编译参数

    * @param files 编译文件

    */

    private static void javac(List ops,String... files){

    StandardJavaFileManager manager = null;

    try{

    manager = compiler.getStandardFileManager(null, null, null);

    Iterable extends JavaFileObject> it = manager.getJavaFileObjects(files);

    JavaCompiler.CompilationTask task = compiler.getTask(null, manager, null, ops, null, it);

    task.call();

    if(logger.isDebugEnabled()){

    for (String file:files)

    logger.debug("Compile Java File:" + file);

    }

    }

    catch(Exception e){

    logger.error(e);

    }

    finally{

    if(manager!=null){

    try {

    manager.close();

    }

    catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    /**

    * 生成java文件

    * @param file 文件名

    * @param source java代码

    * @throws Exception

    */

    private static void writeJavaFile(String file,String source)throws Exception{

    if(logger.isDebugEnabled()){

    logger.debug("Write Java Source Code to:"+file);

    }

    BufferedWriter bw = null;

    try{

    File dir = new File(getFilePath(file));

    if(!dir.exists())

    dir.mkdirs();

    bw = new BufferedWriter(new FileWriter(file));

    bw.write(source);

    bw.flush();

    }

    catch(Exception e){

    throw e;

    }

    finally{

    if(bw!=null){

    bw.close();

    }

    }

    }

    /**

    * 加载类

    * @param name 类名

    * @return

    */

    private static Class> load(String name){

    Class> cls = null;

    ClassLoader classLoader = null;

    try{

    classLoader = ClassUtil.class.getClassLoader();

    cls = classLoader.loadClass(name);

    if(logger.isDebugEnabled()){

    logger.debug("Load Class["+name+"] by "+classLoader);

    }

    }

    catch(Exception e){

    logger.error(e);

    }

    return cls;

    }

    /**

    * 编译代码并加载类

    * @param filePath java代码路径

    * @param source java代码

    * @param clsName 类名

    * @param ops 编译参数

    * @return

    */

    public static Class> loadClass(String filePath,String source,String clsName,List ops){

    try {

    writeJavaFile(CLASS_PATH+filePath,source);

    javac(ops,CLASS_PATH+filePath);

    return load(clsName);

    }

    catch (Exception e) {

    logger.error(e);

    }

    return null;

    }

    /**

    * 调用类方法

    * @param cls 类

    * @param methodName 方法名

    * @param paramsCls 方法参数类型

    * @param params 方法参数

    * @return

    */

    public static Object invoke(Class> cls,String methodName,Class>[] paramsCls,Object[] params){

    Object result = null;

    try {

    Method method = cls.getDeclaredMethod(methodName, paramsCls);

    Object obj = cls.newInstance();

    result = method.invoke(obj, params);

    }

    catch (Exception e) {

    logger.error(e);

    }

    return result;

    }

    }

    五、测试

    public class ClassUtilTest {

    private static final Log logger = LogFactory.getLog(ClassUtilTest.class);

    public static void main(String args[]){

    StringBuilder sb = new StringBuilder();

    sb.append("package com.even.test;");

    sb.append("import java.util.Map;\nimport java.text.DecimalFormat;\n");

    sb.append("public class Sum{\n");

    sb.append("private final DecimalFormat df = new DecimalFormat(\"#.#####\");\n");

    sb.append("public Double calculate(Map data){\n");

    sb.append("double d = (30*data.get(\"f1\") + 20*data.get(\"f2\") + 50*data.get(\"f3\"))/100;\n");

    sb.append("return Double.valueOf(df.format(d));}}\n");

    //设置编译参数

    ArrayList ops = new ArrayList();

    ops.add("-Xlint:unchecked");

    //编译代码,返回class

    Class> cls = ClassUtil.loadClass("/com/even/test/Sum.java",sb.toString(),"com.even.test.Sum",ops);

    //准备测试数据

    Map data = new HashMap();

    data.put("f1", 10.0);

    data.put("f2", 20.0);

    data.put("f3", 30.0);

    //执行测试方法

    Object result = ClassUtil.invoke(cls, "calculate", new Class[]{Map.class}, new Object[]{data});

    //输出结果

    logger.debug(data);

    logger.debug("(30*f1+20*f2+50*f3)/100 = "+result);

    }

    测试结果

    16:12:02.860 DEBUG com.even.tools.ClassUtil - Write Java Source Code to: .../classes//com/even/test/Sum.java

    16:12:03.544 DEBUG com.even.tools.ClassUtil - Compile Java File:.../classes//com/even/test/Sum.java

    16:12:03.545 DEBUG com.even.tools.ClassUtil - Load Class[com.even.test.Sum] by sun.misc.Launcher$AppClassLoader@73d16e93

    16:12:03.547 DEBUG com.even.test.ClassUtilTest - {f1=10.0, f2=20.0, f3=30.0}

    16:12:03.547 DEBUG com.even.test.ClassUtilTest - (30*f1+20*f2+50*f3)/100 = 22.0

    总结

    以上就是本文关于Java动态编译执行代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

    如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

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

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

    一、获取JavaCompiler

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

    获取JDK提供的java编译器,如果没有提供编译器,则返回null;

    二、编译

    //获取java文件管理类

    StandardJavaFileManager manager = compiler.getStandardFileManager(null,null,null);

    //获取java文件对象迭代器

    Iterable extends JavaFileObject> it = manager.getJavaFileObjects(files);

    //设置编译参数

    ArrayList ops = new ArrayList();

    ops.add("-Xlint:unchecked");

    //设置classpath

    ops.add("-classpath");

    ops.add(CLASS_PATH);

    //获取编译任务

    JavaCompiler.CompilationTask task = compiler.getTask(null,manager,ops,it);

    //执行编译任务

    task.call();

    当我们要编译的源代码中,引用了其他代码,我们需要将引用代码路径设置到-classpath中,否则会编译失败。

    三、执行

    //要加载的类名

    String className = "xxx.xxx.xxx";

    //获取类加载器

    ClassLoader classLoader = XXX.class.getClassLoader();

    //加载类

    Class> cls = classLoader.loadClass(className);

    //调用方法名称

    String methodName = "execute";

    //方法参数类型数组

    Class>[] paramCls = {...};

    //获取方法

    Method method = cls.getDeclaredMethod(methodName,paramCls);

    //创建类实例

    Object obj = cls.newInstance();

    //方法参数

    Object[] params = {...};

    //调用方法

    Object result = method.invoke(obj,params);

    四、完整代码

    //ClassUtil.java

    import java.io.FileWriter;

    import java.io.BufferedWriter;

    import java.io.File;

    import java.io.IOException;

    import java.util.ArrayList;

    import javax.tools.JavaCompiler;

    import javax.tools.ToolProvider;

    import javax.tools.JavaFileObject;

    import javax.tools.StandardJavaFileManager;

    import org.apache.commons.logging.Log;

    import org.apache.commons.logging.LogFactory;

    public class ClassUtil {

    private static final Log logger = LogFactory.getLog(ClassUtil.class);

    private static JavaCompiler compiler;

    static{

    compiler = ToolProvider.getSystemJavaCompiler();

    }

    /**

    * 获取java文件路径

    * @param file

    * @return

    */

    private static String getFilePath(String file){

    int last1 = file.lastIndexOf('/');

    int last2 = file.lastIndexOf('\\');

    return file.substring(0,last1>last2?last1:last2)+File.separatorchar;

    }

    /**

    * 编译java文件

    * @param ops 编译参数

    * @param files 编译文件

    */

    private static void javac(List ops,String... files){

    StandardJavaFileManager manager = null;

    try{

    manager = compiler.getStandardFileManager(null,null);

    Iterable extends JavaFileObject> it = manager.getJavaFileObjects(files);

    JavaCompiler.CompilationTask task = compiler.getTask(null,it);

    task.call();

    if(logger.isDebugEnabled()){

    for (String file:files)

    logger.debug("Compile Java File:" + file);

    }

    }

    catch(Exception e){

    logger.error(e);

    }

    finally{

    if(manager!=null){

    try {

    manager.close();

    }

    catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    /**

    * 生成java文件

    * @param file 文件名

    * @param source java代码

    * @throws Exception

    */

    private static void writeJavaFile(String file,String source)throws Exception{

    if(logger.isDebugEnabled()){

    logger.debug("Write Java Source Code to:"+file);

    }

    BufferedWriter bw = null;

    try{

    File dir = new File(getFilePath(file));

    if(!dir.exists())

    dir.mkdirs();

    bw = new BufferedWriter(new FileWriter(file));

    bw.write(source);

    bw.flush();

    }

    catch(Exception e){

    throw e;

    }

    finally{

    if(bw!=null){

    bw.close();

    }

    }

    }

    /**

    * 加载类

    * @param name 类名

    * @return

    */

    private static Class> load(String name){

    Class> cls = null;

    ClassLoader classLoader = null;

    try{

    classLoader = ClassUtil.class.getClassLoader();

    cls = classLoader.loadClass(name);

    if(logger.isDebugEnabled()){

    logger.debug("Load Class["+name+"] by "+classLoader);

    }

    }

    catch(Exception e){

    logger.error(e);

    }

    return cls;

    }

    /**

    * 编译代码并加载类

    * @param filePath java代码路径

    * @param source java代码

    * @param clsName 类名

    * @param ops 编译参数

    * @return

    */

    public static Class> loadClass(String filePath,String source,String clsName,List ops){

    try {

    writeJavaFile(CLASS_PATH+filePath,source);

    javac(ops,CLASS_PATH+filePath);

    return load(clsName);

    }

    catch (Exception e) {

    logger.error(e);

    }

    return null;

    }

    /**

    * 调用类方法

    * @param cls 类

    * @param methodName 方法名

    * @param paramsCls 方法参数类型

    * @param params 方法参数

    * @return

    */

    public static Object invoke(Class> cls,String methodName,Class>[] paramsCls,Object[] params){

    Object result = null;

    try {

    Method method = cls.getDeclaredMethod(methodName,paramsCls);

    Object obj = cls.newInstance();

    result = method.invoke(obj,params);

    }

    catch (Exception e) {

    logger.error(e);

    }

    return result;

    }

    }

    五、测试

    public class ClassUtilTest {

    private static final Log logger = LogFactory.getLog(ClassUtilTest.class);

    public static void main(String args[]){

    StringBuilder sb = new StringBuilder();

    sb.append("package com.even.test;");

    sb.append("import java.util.Map;\nimport java.text.DecimalFormat;\n");

    sb.append("public class Sum{\n");

    sb.append("private final DecimalFormat df = new DecimalFormat(\"#.#####\");\n");

    sb.append("public Double calculate(Map data){\n");

    sb.append("double d = (30*data.get(\"f1\") + 20*data.get(\"f2\") + 50*data.get(\"f3\"))/100;\n");

    sb.append("return Double.valueOf(df.format(d));}}\n");

    //设置编译参数

    ArrayList ops = new ArrayList();

    ops.add("-Xlint:unchecked");

    //编译代码,返回class

    Class> cls = ClassUtil.loadClass("/com/even/test/Sum.java",sb.toString(),"com.even.test.Sum",ops);

    //准备测试数据

    Map data = new HashMap();

    data.put("f1",10.0);

    data.put("f2",20.0);

    data.put("f3",30.0);

    //执行测试方法

    Object result = ClassUtil.invoke(cls,"calculate",new Class[]{Map.class},new Object[]{data});

    //输出结果

    logger.debug(data);

    logger.debug("(30*f1+20*f2+50*f3)/100 = "+result);

    }

    测试结果

    16:12:02.860 DEBUG com.even.tools.ClassUtil - Write Java Source Code to: .../classes//com/even/test/Sum.java

    16:12:03.544 DEBUG com.even.tools.ClassUtil - Compile Java File:.../classes//com/even/test/Sum.java

    16:12:03.545 DEBUG com.even.tools.ClassUtil - Load Class[com.even.test.Sum] by sun.misc.Launcher$AppClassLoader@73d16e93

    16:12:03.547 DEBUG com.even.test.ClassUtilTest - {f1=10.0,f2=20.0,f3=30.0}

    16:12:03.547 DEBUG com.even.test.ClassUtilTest - (30*f1+20*f2+50*f3)/100 = 22.0

    总结

    以上就是本文关于Java动态编译执行代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

    如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

    总结

    以上是编程之家为你收集整理的Java动态编译执行代码示例全部内容,希望文章能够帮你解决Java动态编译执行代码示例所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

    展开全文
  • 动态执行一段简单代码,采用生成java文件,调用javac编译,反射执行的方式。只是一个简单测试,有些地方有待完善。代码如下import java.io.*;/*** 动态执行一段代码(生成文件->编译->执行)* @author ...

    动态的执行一段简单代码,采用生成java文件,调用javac编译,反射执行的方式。

    只是一个简单测试,有些地方有待完善。

    代码如下

    import java.io.*;

    /**

    * 动态执行一段代码(生成文件->编译->执行)

    * @author kingfish

    * @version 1.0

    */

    public class TestRun {

    private String fileName = "Test.java";

    private String className= "Test.class";

    public TestRun() {

    File f = new File(fileName);

    if(f.exists()) f.delete();

    f = new File(className);

    if(f.exists()) f.delete();

    }

    /**

    * 创建java文件

    */

    public void createJavaFile(String body) {

    String head = "public class Test{/r/n  public static void runCode(){";

    String end = "/r/n  }/r/n}";

    try {

    DataOutputStream dos = new DataOutputStream(new FileOutputStream(

    fileName));

    dos.writeBytes(head);

    dos.writeBytes(body);

    dos.writeBytes(end);

    dos.close();

    }

    catch (Exception e) {

    e.printStackTrace();

    }

    }

    /**

    * 编译

    */

    public int makeJavaFile() {

    int ret = 0;

    try {

    Runtime rt = Runtime.getRuntime();

    Process ps = rt.exec("cmd /c javac " + fileName);

    ps.waitFor();

    byte[] out = new byte[1024];

    DataInputStream dos = new DataInputStream(ps.getInputStream());

    dos.read(out);

    String s = new String(out);

    if (s.indexOf("Exception") > 0) {

    ret = -1;

    }

    }

    catch (Exception e) {

    ret = -1;

    e.printStackTrace();

    }

    return ret;

    }

    /**

    * 反射执行

    */

    public void run() {

    try {

    Class.forName("Test").getMethod("runCode", new Class[] {}).invoke(null, new Object[]{});

    }

    catch (Exception e) {

    e.printStackTrace();

    }

    }

    /**

    * 测试

    */

    public static void main(String[] args) {

    String cmd = "System.out.println(/"usage:java TestRun int i=1; System.out.println(i+100);/");";

    if(args.length>=1){

    cmd = args[0];

    }

    TestRun t = new TestRun();

    t.createJavaFile(cmd);

    if (t.makeJavaFile() == 0) {

    t.run();

    }

    }

    }

    测试:

    java TestRun System.out.println(/"Hello,World!/");

    java TestRun "int i=1;int j=2;System.out.println(i+j);"

    如有任何问题,请指正!

    kingfish

    2005.4.3

    展开全文
  • 动态执行一段简单代码,采用生成java文件,调用javac编译,反射执行的方式。只是一个简单测试,有些地方有待完善。代码如下import java.io.*;/*** 动态执行一段代码(生成文件->编译->执行)* @author ...

    动态的执行一段简单代码,采用生成java文件,调用javac编译,反射执行的方式。

    只是一个简单测试,有些地方有待完善。

    代码如下

    import java.io.*;

    /**

    * 动态执行一段代码(生成文件->编译->执行)

    * @author kingfish

    * @version 1.0

    */

    public class TestRun {

    private String fileName = "Test.java";

    private String className= "Test.class";

    public TestRun() {

    File f = new File(fileName);

    if(f.exists()) f.delete();

    f = new File(className);

    if(f.exists()) f.delete();

    }

    /**

    * 创建java文件

    */

    public void createJavaFile(String body) {

    String head = "public class Test{/r/n  public static void runCode(){";

    String end = "/r/n  }/r/n}";

    try {

    DataOutputStream dos = new DataOutputStream(new FileOutputStream(

    fileName));

    dos.writeBytes(head);

    dos.writeBytes(body);

    dos.writeBytes(end);

    dos.close();

    }

    catch (Exception e) {

    e.printStackTrace();

    }

    }

    /**

    * 编译

    */

    public int makeJavaFile() {

    int ret = 0;

    try {

    Runtime rt = Runtime.getRuntime();

    Process ps = rt.exec("cmd /c javac " + fileName);

    ps.waitFor();

    byte[] out = new byte[1024];

    DataInputStream dos = new DataInputStream(ps.getInputStream());

    dos.read(out);

    String s = new String(out);

    if (s.indexOf("Exception") > 0) {

    ret = -1;

    }

    }

    catch (Exception e) {

    ret = -1;

    e.printStackTrace();

    }

    return ret;

    }

    /**

    * 反射执行

    */

    public void run() {

    try {

    Class.forName("Test").getMethod("runCode", new Class[] {}).invoke(null, new Object[]{});

    }

    catch (Exception e) {

    e.printStackTrace();

    }

    }

    /**

    * 测试

    */

    public static void main(String[] args) {

    String cmd = "System.out.println(/"usage:java TestRun int i=1; System.out.println(i+100);/");";

    if(args.length>=1){

    cmd = args[0];

    }

    TestRun t = new TestRun();

    t.createJavaFile(cmd);

    if (t.makeJavaFile() == 0) {

    t.run();

    }

    }

    }

    测试:

    java TestRun System.out.println(/"Hello,World!/");

    java TestRun "int i=1;int j=2;System.out.println(i+j);"

    如有任何问题,请指正!

    kingfish

    2005.4.3

    展开全文
  • 主要介绍了Java动态编译执行代码示例,具有一定借鉴价值,需要的朋友可以参考下。
  • Java 反序列化漏洞的危害不仅在于普通小工具所能带来的命令执行,还在于使用链构建的单向代码链所能实现的有限能力,因为Java应用程序场景和小工具大多构建单向代码执行。然而,在大多数情况下,比如需要echo和注入...
  • Java 反序列化漏洞的危害不仅在于普通小工具所能带来的命令执行,还在于使用链构建的单向代码链所能实现的有限能力,因为Java应用程序场景和小工具大多构建单向代码执行。然而,在大多数情况下,比如需要echo和注入...
  • Java 反序列化漏洞的危害不仅在于普通小工具所能带来的命令执行,还在于使用链构建的单向代码链所能实现的有限能力,因为Java应用程序场景和小工具大多构建单向代码执行。然而,在大多数情况下,比如需要echo和注入...
  • JAVA动态编译执行文本代码和加载执行jar包 一、动态编译器实现类 package com.api.utils; import javax.tools.Diagnostic; import javax.tools.DiagnosticCollector; import javax.tools.FileObject; import ...
  • Java 动态执行代码

    2012-10-26 15:59:21
    动态执行java代码比较好的有ognl(只能计算表达示),javassist更改class文件方式实现   package com.henglu.test; import java.security.SecureClassLoader; import javassist.ClassPool; import javassist....
  • java动态运行代码并动态执行

    千次阅读 2020-08-17 16:45:32
    动态编译和执行都可以使用runtime方法在此不讲 动态编译 - 使用JavaCompiler方法进行编译 //动态编译 String path="g:/dynamic/first.java"; //路径 JavaCompiler compiler=ToolProvider....
  • 动态执行逻辑的方法据我所知有一下两种方式QLExpressGroovyQLExpressQLExpress是阿里开源的动态脚本执行的项目。 由阿里的电商业务规则、表达式(布尔组合)、特殊数学公式计算(高精度)、语法分析、脚本二次定制等强...
  • 背景Java是编译型语言,它不能向JavaScript一样被动态执行,但有时我们却不得不让Java代码动态运行的能力,以便我们无需重启容器就可以达到动态发布服务的能力,比如我们要做一个爬虫解析程序,我们希望可以在平台...
  • 一.前言说到语言的动态性,这...java相关的动态加载技术也非常的成熟,在android客户端,可以用这种技术热修复,动态替换有bug的相关代码;在服务端也有广泛的应用,像java的插件技术,感兴趣的可以参考 https://git...
  • Java知识点总结(动态执行JS代码 )@(Java知识点总结)[Java, 动态字节码操作]JDK6.0之后提供了脚本引擎功能,让我们可以执行某些脚本语言,特别是javascript(javascript是一门解释性语言,动态性非常好)。让JAVA动态...
  • 1 packagecom....23 importjava.lang.reflect.Constructor;4 importjava.lang.reflect.Field;5 importjava.lang.reflect.InvocationTargetException;6 importjava.lang.reflect.Method;7 importjava.lang.re...
  • Java项目中,或多或少我们有动态执行代码的需求,比如: 系统中有一个规则验证需求,但规则经常改变 代码热更新,热修复 笔者也在目前参与的一个项目中遇到了动态执行代码的需求:项目需要一个自动审核模块,...
  • 需求:要实现一个web网页中输入java代码,然后能知道编译结果以及执行结果类似于菜鸟java在线工具的效果:https://c.runoob.com/compile/10刚开始从什么概念都没有到最后封装成一个完整的工具类,中间查阅了很多资料...
  • 首先要到http://www.beanshell.org/download.html去下载个BeanShell的一个包,如bsh-2.0b4.jar ,然后在ClassPath...import java.util.Date;import bsh.EvalError;import bsh.Interpreter;public class Test {publi...
  • Java动态执行代码Bsh

    2014-02-28 17:42:52
    首先要到http://www.beanshell.org/download.html去下载个BeanShell的一个包,如bsh-2.0b4.jar ,然后在... package test; import java.util.Date; import bsh.EvalError; import bsh.Interpreter; public...
  • java后端写了个for循环,需要处理几十万条数据,前端需要等待很长时间,默认的loading等待弹窗就不大适用了,会让人误以为页面卡住了,所以整了个进度条来实时显示for循环执行进度。 前端代码,需要引入layui....
  • Java动态编译执行

    万次阅读 2017-01-05 16:18:02
    在某些情况下,我们可能需要动态生成java代码,通过动态编译,然后执行代码JAVA API提供了相应的工具(JavaCompiler)来实现动态编译。下面我们通过一个简单的例子介绍,如何通过JavaCompiler实现java代码动态编译...
  • 点击上方蓝色字关注我们~在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码JAVA API提供了相应的工具(JavaCompiler)来实现动态编译。下面我们通过一个简单的例子介绍,如何通过JavaCompiler...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,886
精华内容 2,354
关键字:

java动态代码执行

java 订阅