java - 如何调用以 String 形式形成的 Java 函数

标签 java spring-boot java-8

我正在使用SpringBoot,

我有字符串形式的函数,我想通过传递参数来执行该函数(以便它的行为像普通的java函数)

例如:

String s = "public void method_name(String name, int s) {\n" + 
                "        System.out.println(name + s);\n" + 
                "    }";

我想调用这个函数,输入:method_name("abc", 10)

输出:abc10

我有什么办法或任何JAVA库??

我尝试过的事情:

1)使用java.beans.Statement;

提前致谢! :)

为什么我需要这个? 我在 JSON 文件中使用这个函数,我将在其中动态地获取这个函数。 JSON 对象:

{
 "1":{
 "function" : "public void method_name(String name, int s) {\n" + 
                    "        System.out.println(name + s);\n" + 
                    "    } "
 },
 "2": {
   "function" : another function
 }
} 

希望你能理解这一点。

最佳答案

这可以做到:查看javax.tools.JavaCompiler

但是

您将在应用程序中创建一个巨大安全漏洞。如果用户获得对该 json 文件的访问权限怎么办?他们将能够通过您的应用程序在您的服务器上运行任意代码。

你真的需要问自己这是否是你真正想做的事情。也许有更简单的方法来实现你想要的?例如,查看策略设计模式。也许它已经可以完成您想要的大部分操作。

此外,JavaCompiler 很难工作。除了 JavaCompiler 本身之外,您还需要了解反射和类加载器才能使其工作。所以这是不走这条路的另一个原因。

不要这样做。

关于java - 如何调用以 String 形式形成的 Java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47732183/

相关文章:

java - 通过 HTTP 从 android 应用程序发送到 nodejs 服务器后,我的 JSON 看起来不同

java - ANTLR以递归方式替换token

java - Spring 启动: hibernate cannot mapping entity to table in postgresql: spring boot

spring-boot - 运行 Spring Boot Scheduler 和 Apache Camel 时出现问题

java - 如何修复actionPerformed方法中的找不到符号?

java - 登录失败,您不能使用 Facebook 登录此应用

java - Spring MVC 视频类型转发并以 bytes[] 形式发送

java - CompletableFuture runAsync 与使用 Executor 执行每个 Runnable

java - 使用 Comparator 对列表进行排序时出现 java.lang.illegalArgumentException : comparison method violates its general contract !

Java 8::(双冒号)运算符的 Groovy 等效项