import groovy.lang.Binding;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import groovy.lang.GroovyShell;
import groovy.util.ResourceException;
import groovy.util.ScriptException;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import org.codehaus.groovy.control.CompilationFailedException;
public class Test {
public static void main(String[] args) throws CompilationFailedException,
IOException, InstantiationException, IllegalAccessException,
ResourceException, ScriptException, IllegalArgumentException,
SecurityException, InvocationTargetException, NoSuchMethodException {
GroovyShell shell = new GroovyShell(new Binding());
Object b = shell
.evaluate("import com.talents.compiler.groovy.math.AlgorithmBridge; AlgorithmBridge.max('11 1')");
System.out.println("fun " + b.toString());
}
public static void fun3(String path) throws IOException, ResourceException,
ScriptException, InstantiationException, IllegalAccessException,
IllegalArgumentException, SecurityException,
InvocationTargetException, NoSuchMethodException {
String scriptText = "class Foo {\n"
+ " int add(int x, int y) { x + y }}";
GroovyClassLoader loader = new GroovyClassLoader();
Class<?> newClazz = loader.parseClass(scriptText);
Object obj = newClazz.newInstance();
Object i = obj.getClass().getMethod("add", int.class, int.class)
.invoke(obj, 2, 3);
System.out.println(i);
}
public static void fun2(String path) {
String scriptText = " if(values){ 1;}else{ 2}";
Binding binding = new Binding();
binding.setVariable("values", 10);
GroovyShell shell = new GroovyShell(binding);
Object b = shell.evaluate(scriptText);
System.out.println("fun " + b.toString());
}
@SuppressWarnings("rawtypes")
public static void fun1(String path) throws Exception, IOException {
ClassLoader parent = RunScriptService.class.getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(new File(path));
GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
System.out.println(groovyObject.invokeMethod("sum", "1 1 1 "));
}
}
分享到:
相关推荐
Groovy代码可以被Java编译器理解,并且在运行时,GroovyShell或GroovyClassLoader等工具能够即时编译和执行Groovy脚本,这为动态加载和执行提供了便利。 当我们需要在Java程序中调用Groovy脚本时,可以使用以下步骤...
Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...
GroovyShell允许在运行时执行Groovy脚本,而GroovyClassLoader则可以动态加载和执行新的类。在Java应用中,只需几行代码,就可以实现Groovy脚本的编译和执行: ```java GroovyShell shell = new GroovyShell(); ...
动态加载指定目录下的groovy脚本,并将其注册为groovy bean,放置于ApplicationContext容器中,并使用命名空间进行分类区分(一个namespace对应于一个ApplicationContext)。同时能够动态感知到groovy脚本的新增、修改...
这种方法的优点是Groovy脚本的修改不需要重新编译整个项目,因为Java代码可以通过反射动态地找到并调用Groovy方法。这里,我们首先创建一个`GroovyClassLoader`来解析Groovy源文件,然后通过`newInstance`方法实例化...
标题“hugo110-java_run_groovy-master_java_”表明这是一个关于使用Java运行Groovy脚本的项目,可能是某个GitHub仓库的克隆或归档。描述中提到,这个环境是为了方便用户(可能是开发者)实践Groovy语言,并为后续的...
动态加载指定目录下的groovy脚本,并将其注册为groovy bean,放置于ApplicationContext容器中,并使用命名空间进行分类区分(一个namespace对应于一个ApplicationContext)。同时能够动态感知到groovy脚本的新增、修改...
Groovy提供了GroovyShell、GroovyScriptEngine和GroovyClassLoader等工具,允许我们执行Groovy脚本或字符串中的代码。 GroovyShell是Groovy提供的一种简单方式来执行Groovy脚本。通过创建一个GroovyShell实例,我们...
- **GroovyClassLoader**:这个类用于加载和执行Groovy类,如果需要将Groovy脚本编译成Java类,这个工具非常有用。 3. **嵌入式脚本的应用场景**: - **配置文件**:Groovy可以作为配置文件的语言,提供比纯文本...
这篇博客文章“Java调用Groovy”可能会探讨如何在Java代码中执行Groovy脚本,以及这样做的优势和实践方法。 首先,Java可以通过`GroovyShell`或`GroovyScriptEngine`来执行Groovy脚本。`GroovyShell`是Groovy提供的...
总的来说,Java 通过 GroovyShell 和 GroovyClassLoader 提供了强大的能力,使得我们可以动态地加载和执行 Groovy 脚本,这对于需要动态扩展功能或者进行数据统计等任务的系统来说,是一种高效且灵活的解决方案。...
例如,可以在 Spring 配置文件中添加一个 defaults 元素,设置 refresh-check-delay 属性的值为 60000 毫秒,以便每分钟重新加载 Groovy 脚本。 在测试中,可以使用 Spring 的 ApplicationContext 来获取 ...
问题原因分析:使用ScriptEngine.eval每次都会对脚本进行编译,生成一个新的类,被GroovyClassLoader加载,大量执行计算后,将导致被加载的类数量不断增加,最终OOM。 解决办法:对计算的表达式expression进行预...
JUN SpringBoot API Service 是一个基于SpringBoot+Groovy+SQL动态生成API并动态发布,且发布后可动态执行groovy脚本及SQL脚本的API服务项目。提供在线执行动态程序脚热加载本及动态生成API并执行的功能。支持动态...
"flink_cep"指Flink的CEP模块,"groovy"可能表示使用Groovy编程语言编写的脚本或示例,Groovy是一种简洁且强大的Java平台脚本语言,常用于Flink作业的编写。"aviator"则可能是用于表达式解析的Aviator库,这是一个轻...
这样,每次启动或更新脚本时,Spring都会自动加载并执行远程Groovy脚本,实现动态功能的扩展。 总的来说,"groovy+maven+spring"的结合为Java开发带来了很大的便利。Groovy提供了动态语言的灵活性,Maven保证了项目...
Groovy是一种强大的、动态的编程语言,它无缝集成在Java平台上,使得开发人员可以利用其简洁的语法和灵活性来提高生产力。在Java生态系统中,Groovy经常被用来处理XML文档,因为它的动态特性使得XML的读取、修改和...
通过阅读和分析这些源码,我们可以深入了解Groovy的内部工作原理,如何将Groovy脚本转化为字节码,以及如何与Java平台交互。 `lowernl4` 这个标签可能指的是Groovy对源代码的处理方式,比如它可能表示源代码被转换...
Groovy是一种强大的、动态的编程语言,它无缝集成于Java平台之上,提供了许多方便和灵活的特性。在Groovy中,动态方法是通过元编程(Metaprogramming)实现的,这使得我们可以在运行时修改或添加类的行为。元编程在...