如何将字符串转换为 Java 中的可运行代码

How To Convert String To Runnable Code In Java

我将 Java 代码作为字符串存储在数据库中。例如:

String x = "System.out.println(\"X\")";

我需要在任务执行器服务中将其转换为 java.lang.Runnable 到 运行。如何创建它?

private Runnable StringToRunnable(String task){
Runnable runnable = null;

return runnable;
}

Janino 是按需编译器的流行选择。许多开源项目都在使用它。

用法很简单。代码

import org.codehaus.janino.ScriptEvaluator;

public class App {

    public static void main(String[] args) throws Exception {

        String x = "System.out.println(\"X\");"; //<-- dont forget the ; in the string here
        ScriptEvaluator se = new ScriptEvaluator();  
        se.cook(x);
        se.evaluate(new Object[0]);    
    }
}

打印 x.

正如其他人已经指出的那样,从数据库加载代码并执行它可能有点冒险。

我创建了这个方法

    private void getMethod(String fromClass, String fromMethod) {
    Class<?> aClass;
    try {
        aClass = Class.forName(fromClass);
        Method method = aClass.getMethod(fromMethod);
        method.setAccessible(true);
        method.invoke(aClass.newInstance());
    } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) {
        e.printStackTrace();
    }
}

并由

调用
        Runnable task = () -> getMethod(fromClass, fromMethod);

然后我将类名和方法名放入数据库中:

this.getClass().getCanonicalName() and string method name