本例中,我们会使用GroovyClassLoader来加载groovy脚本。
GroovyClassLoader是一个定制的类装载器,负责解释加载Java类中用到的Groovy类。它也能编译。清单2.21展示了如何使用GroovyClassLoader加载Groovy类并且调用该类的一个方法。
@Component public class AccessComputeService { public static final Logger logger = LoggerFactory.getLogger(AccessComputeService.class); private static GroovyClassLoader loader; private static final ConcurrentHashMap<String,GroovyObject> groovyObjects = new ConcurrentHashMap<>(); static { PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); loader = new GroovyClassLoader(AccessComputeService.class.getClassLoader()); try { //适配读取classpath下面的*.groovy文件列表 Resource[] resources = resolver.getResources("classpath:accessScore/*.groovy"); if(resources==null || resources.length==0){ logger.warn("未获取到groovy文件"); }else{ for (Resource resource: resources) { try ( InputStream inputStream = AccessComputeService.class.getClassLoader().getResourceAsStream("accessScore/" + resource.getFilename())){ logger.info("加载准入评分groovy脚本:{}", resource.getFilename()); String text = CharStreams.toString(new InputStreamReader(inputStream, "UTF-8")); Class groovyClass = loader.parseClass(text,resource.getFilename()); GroovyObject scriptInstance = (GroovyObject)groovyClass.newInstance(); groovyObjects.put(resource.getFilename().split("\\.")[0],scriptInstance); } } } } catch (Exception e) { logger.error("groovy 引擎初始化失败!!!!!!!!",e); } } public void execute(String scriptFileName, String scriptFunctionName, Map<String, Object> dataMap) { //scriptFileName:文件名,scriptFunctionName:文件的方法,dataMap:参数 Strong result = (String)groovyObjects.get(scriptFileName).invokeMethod(scriptFunctionName, dataMap); } }
其他调用groovy的方式:
http://blog.csdn.net/eric_sunah/article/details/11541307
相关推荐
我们可以编写一个Java方法,从MongoDB中查询到Groovy脚本,然后利用上述的Groovy调用机制执行这些脚本。 例如,我们可能会有一个MongoDB集合,其中每个文档包含一个字段存储Groovy脚本。Java代码会连接到MongoDB,...
描述中提到的Groovy调用Java的过程是“无缝”的,这意味着Groovy对Java API的集成非常紧密,使得开发者可以自然地在Groovy中使用Java的功能。 Java调用Groovy类则稍微复杂一些,通常有两种主要方法: 1. **方法1:...
例如,Java可以创建Groovy类的实例,调用其方法: ```java import groovy.lang.GroovyObject; import groovy.lang.GroovyClassLoader; Class groovyClass = new GroovyClassLoader().parseClass( "class Hello...
在Java环境中,部署通常意味着将代码打包成JAR或WAR文件,然后将其上传到服务器。由于Groovy脚本可以直接作为文本文件存储,因此部署Groovy脚本非常简单,只需要将脚本文件复制到服务器上的相应位置即可。发布则涉及...
- **GroovyObject接口**:Groovy类自动实现`GroovyObject`接口,这使得Java可以调用Groovy对象的方法。 2. **Groovy的优势**: - **动态性**:Groovy支持动态类型,这意味着变量的类型可以在运行时改变,这在编写...
在同一个 `GroovyShell` 实例中,所有变量值都会保留在一个“session”中,这意味着你在后续的 `evaluate` 调用中可以继续访问和修改这些变量。 例如,以下代码展示了如何在 GroovyShell 中调用方法: ```java ...
在测试中,可以使用 Spring 的 ApplicationContext 来获取 helloWorldService bean,并调用其 sayHello 方法,以验证 Groovy 脚本的正确性。 Groovy 在 Spring 中的使用可以带来许多好处,例如可以动态修改业务逻辑...
本篇文章将重点讲解如何使用Groovy调用Weka来生成决策树。 在Groovy中调用Weka,首先需要确保你的环境中已经安装了Weka库。这通常通过Maven或Gradle等构建工具添加依赖来实现。对于Maven,可以在pom.xml文件中添加...
GroovyClassLoader是Groovy提供的另一个关键工具,它允许我们在运行时动态加载Groovy类。我们可以使用这个类来编译和执行Groovy源代码字符串。下面是一个使用GroovyClassLoader的例子: ```java import groovy.lang...
下载的资源文件中,封装了并发计算以及内存溢出解决方案的工具类GroovyEngine.java,调用示例: GroovyEngine engine = GroovyEngine.getInstance(); engine.put("a",1); engine.put("b",2); Object v1 = engine....
5. 链式方法调用:Groovy允许连续调用对象方法,如`list.add("item").sort().reverse()`。 在OFBiz(Open For Business Project)这个开源的企业级应用框架中,Groovy也被广泛使用。OFBiz是一个基于Java的全面的...
创建`native-lib.cpp`文件,这里我们将实现C++调用Java的方法。首先,我们需要声明Java方法的本地方法ID,然后使用JNIEnv接口调用Java方法: ```cpp #include #include extern "C" JNIEXPORT jstring JNICALL ...
JNI,全称Java Native ...通过在Java中定义本地方法,在C/C++中编写其实现,再通过NDK编译工具链进行编译,最终在Android应用中无缝调用这些本地方法。这个示例展示了从创建本地方法到实现和编译C代码的完整流程。
在Java代码中,我们需要定义对应的native方法,并使用`System.loadLibrary`加载库: ```java public class MyActivity extends AppCompatActivity { static { System.loadLibrary("ccalljava"); // 假设库名为...
总结,Java调用C++方法的关键在于使用JNA库,定义C++库的Java接口,加载库并调用相应函数。通过这种方式,可以充分利用已有的C++代码库,同时保持Java应用程序的可移植性和易管理性。记得在不同操作系统上调整库文件...
学习和理解这些CHM文件中的内容,开发者可以更好地掌握Groovy语言的各个方面,包括其动态特性、元编程能力以及与Java的互操作性。这对于开发基于Groovy的应用程序、脚本或者增强现有的Java项目都至关重要。通过深入...
在这个示例中,我们首先创建了一个`IniConfiguration`对象,然后通过调用`read()`方法加载Ini文件。接下来,我们可以使用`configurationAt()`方法获取特定section的配置,并通过`getString()`方法读取特定key的值。 ...
在Android开发中,加载资源文件,尤其是PDF文档,是一个常见的需求。这个"加载资源文件的PDF"项目提供了一个完美的示例,演示了如何在Android应用中实现PDF的加载、缩放以及保持清晰度。以下是对这个项目的详细解析...
这个单一的JAR文件包含了大量的Groovy模块,包括编译器、类加载器、标准库以及Groovy语言的其他相关组件。这样,你无需为每个单独的Groovy库添加依赖,只需要引用`groovy-all.jar`即可。 描述中提到的`groovy-1.7.2...