我将Java代码作为字符串存储在数据库中。例如:
String x = "System.out.println(\"X\")";
我需要将其转换为java.lang.Runnable
以便在任务执行器服务中运行它。如何创建它?
private Runnable StringToRunnable(String task){
Runnable runnable = null;
return runnable;
}
答案 0 :(得分:0)
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
。
正如其他人已经指出的那样,从数据库中加载代码并执行它可能会有些冒险。
答案 1 :(得分:0)
我创建了此方法
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);
然后我将className和method Name放在数据库中:
this.getClass()。getCanonicalName()和字符串方法名称