`
zjx158
  • 浏览: 4554 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java动态加载Groovy脚本

阅读更多
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 "));

	}
}
分享到:
评论

相关推荐

    Java调用Groovy,实时动态加载数据库groovy脚本

    Groovy代码可以被Java编译器理解,并且在运行时,GroovyShell或GroovyClassLoader等工具能够即时编译和执行Groovy脚本,这为动态加载和执行提供了便利。 当我们需要在Java程序中调用Groovy脚本时,可以使用以下步骤...

    java 动态脚本语言 精通 Groovy

    Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...

    基于groovy实现 java脚本动态编译、部署、发布;可以通过脚本直接调用dubbo接口.zip

    GroovyShell允许在运行时执行Groovy脚本,而GroovyClassLoader则可以动态加载和执行新的类。在Java应用中,只需几行代码,就可以实现Groovy脚本的编译和执行: ```java GroovyShell shell = new GroovyShell(); ...

    groovy-loader:在文件目录中动态加载Groovy脚本

    动态加载指定目录下的groovy脚本,并将其注册为groovy bean,放置于ApplicationContext容器中,并使用命名空间进行分类区分(一个namespace对应于一个ApplicationContext)。同时能够动态感知到groovy脚本的新增、修改...

    groovy和Java相互调用1

    这种方法的优点是Groovy脚本的修改不需要重新编译整个项目,因为Java代码可以通过反射动态地找到并调用Groovy方法。这里,我们首先创建一个`GroovyClassLoader`来解析Groovy源文件,然后通过`newInstance`方法实例化...

    hugo110-java_run_groovy-master_java_

    标题“hugo110-java_run_groovy-master_java_”表明这是一个关于使用Java运行Groovy脚本的项目,可能是某个GitHub仓库的克隆或归档。描述中提到,这个环境是为了方便用户(可能是开发者)实践Groovy语言,并为后续的...

    groovy-loader-v2:在文件目录中动态加载Groovy脚本

    动态加载指定目录下的groovy脚本,并将其注册为groovy bean,放置于ApplicationContext容器中,并使用命名空间进行分类区分(一个namespace对应于一个ApplicationContext)。同时能够动态感知到groovy脚本的新增、修改...

    java动态代码执行

    Groovy提供了GroovyShell、GroovyScriptEngine和GroovyClassLoader等工具,允许我们执行Groovy脚本或字符串中的代码。 GroovyShell是Groovy提供的一种简单方式来执行Groovy脚本。通过创建一个GroovyShell实例,我们...

    java应用简单嵌入脚本模块

    - **GroovyClassLoader**:这个类用于加载和执行Groovy类,如果需要将Groovy脚本编译成Java类,这个工具非常有用。 3. **嵌入式脚本的应用场景**: - **配置文件**:Groovy可以作为配置文件的语言,提供比纯文本...

    Java调用Groovy

    这篇博客文章“Java调用Groovy”可能会探讨如何在Java代码中执行Groovy脚本,以及这样做的优势和实践方法。 首先,Java可以通过`GroovyShell`或`GroovyScriptEngine`来执行Groovy脚本。`GroovyShell`是Groovy提供的...

    java在嵌入运行groovy代码1

    总的来说,Java 通过 GroovyShell 和 GroovyClassLoader 提供了强大的能力,使得我们可以动态地加载和执行 Groovy 脚本,这对于需要动态扩展功能或者进行数据统计等任务的系统来说,是一种高效且灵活的解决方案。...

    Groovy在Spring中的简单使用

    例如,可以在 Spring 配置文件中添加一个 defaults 元素,设置 refresh-check-delay 属性的值为 60000 毫秒,以便每分钟重新加载 Groovy 脚本。 在测试中,可以使用 Spring 的 ApplicationContext 来获取 ...

    Groovy大量计算导致oom的解决办法

    问题原因分析:使用ScriptEngine.eval每次都会对脚本进行编译,生成一个新的类,被GroovyClassLoader加载,大量执行计算后,将导致被加载的类数量不断增加,最终OOM。 解决办法:对计算的表达式expression进行预...

    JUN SpringBoot API Service 是一个基于SpringBoot+Groovy+SQL动态生成API

    JUN SpringBoot API Service 是一个基于SpringBoot+Groovy+SQL动态生成API并动态发布,且发布后可动态执行groovy脚本及SQL脚本的API服务项目。提供在线执行动态程序脚热加载本及动态生成API并执行的功能。支持动态...

    Flink动态CEP,来自啤酒鸭

    "flink_cep"指Flink的CEP模块,"groovy"可能表示使用Groovy编程语言编写的脚本或示例,Groovy是一种简洁且强大的Java平台脚本语言,常用于Flink作业的编写。"aviator"则可能是用于表达式解析的Aviator库,这是一个轻...

    groovy+maven+spring

    这样,每次启动或更新脚本时,Spring都会自动加载并执行远程Groovy脚本,实现动态功能的扩展。 总的来说,"groovy+maven+spring"的结合为Java开发带来了很大的便利。Groovy提供了动态语言的灵活性,Maven保证了项目...

    Groovy 动态修改XML

    Groovy是一种强大的、动态的编程语言,它无缝集成在Java平台上,使得开发人员可以利用其简洁的语法和灵活性来提高生产力。在Java生态系统中,Groovy经常被用来处理XML文档,因为它的动态特性使得XML的读取、修改和...

    groovy-src-1.8.5.zip_.bzrignore_Groovy_Java 8_groovy src_lowern

    通过阅读和分析这些源码,我们可以深入了解Groovy的内部工作原理,如何将Groovy脚本转化为字节码,以及如何与Java平台交互。 `lowernl4` 这个标签可能指的是Groovy对源代码的处理方式,比如它可能表示源代码被转换...

    groovy动态方法

    Groovy是一种强大的、动态的编程语言,它无缝集成于Java平台之上,提供了许多方便和灵活的特性。在Groovy中,动态方法是通过元编程(Metaprogramming)实现的,这使得我们可以在运行时修改或添加类的行为。元编程在...

Global site tag (gtag.js) - Google Analytics