Java动态脚本Groovy的特性是什么
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要为大家展示了"Java动态脚本Groovy的特性是什么",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java动态脚本Groovy的特性是什么"
千家信息网最后更新 2025年11月12日Java动态脚本Groovy的特性是什么1.Groovy特性
2.核心涉及
3.Java与Groovy转换
第一步:引入Groovy依赖
第二步:创建interface接口声明方法
第三步:在resources目录下创建.groovy文件
第四步:创建Groovy脚本装载类,动态解析脚本为Class
第五步:读取脚本内容,执行脚本
4.Groovy特性验证
第一步:将之前Groovy脚本数据修改。存于数据库表中,动态加载脚本
第二步:数据库表中:添加、查询Groovy脚本,动态加载执行
这篇文章主要为大家展示了"Java动态脚本Groovy的特性是什么",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java动态脚本Groovy的特性是什么"这篇文章吧。
1.Groovy特性
可将java代码在Groovy脚本动态编码、代码被修改达到不重启服务的目的(类似于热部署)
2.核心涉及
ClassLoader:就是类的装载器,它使JVM可以动态的载入Java类,JVM并不需要知道从什么地方(本地文件、网络等)载入Java类,这些都由ClassLoader完成。GroovyClassLoader:动态地加载一个脚本并执行它的行为。GroovyClassLoader是一个定制的类装载器,负责解释加载Java类中用到的Groovy类。
3.Java与Groovy转换
第一步:引入Groovy依赖
org.codehaus.groovy groovy 2.5.14
第二步:创建interface接口声明方法
public interface CallAnalysis { default void load() { }}第三步:在resources目录下创建.groovy文件
package groovyimport com.example.groovy.testgroovy.task.CallAnalysisimport groovy.util.logging.Slf4j@Slf4jclass CallAnalysisImpl implements CallAnalysis{ @Override void load() { log.info("我被Groovy脚本加载...") }}第四步:创建Groovy脚本装载类,动态解析脚本为Class
package com.example.groovy.testgroovy.task;import groovy.lang.GroovyClassLoader;public class GroovyUtils { private final static ClassLoader classLoader = GroovyUtils.class.getClassLoader();//获取当前类装载器 //ClassLoader:就是类的装载器,它使JVM可以动态的载入Java类,JVM并不需要知道从什么地方(本地文件、网络等)载入Java类,这些都由ClassLoader完成。 public final static GroovyClassLoader groovyClassLoader = new GroovyClassLoader(classLoader); //GroovyClassLoader:负责在运行时编译groovy源代码为Class的工作,从而使Groovy实现了将groovy源代码动态加载为Class的功能。 /** * . * 获取实例化对象 * @param script groovy脚本内容 * @param * @return * @throws IllegalAccessException * @throws InstantiationException */ public static T instanceTaskGroovyScript(String script) throws IllegalAccessException, InstantiationException { Class taskClz = groovyClassLoader.parseClass(script); T instance = (T) taskClz.newInstance(); return instance; }} 第五步:读取脚本内容,执行脚本
package com.example.groovy.testgroovy.task;import lombok.extern.slf4j.Slf4j;import org.apache.commons.io.FileUtils;import org.springframework.stereotype.Component;import java.io.File;import java.io.IOException;@Slf4j@Componentpublic class CallAnalysisGroovyTask { /** * . * 读取脚本内容 * * @return */ public static String getGroovy() { String context = ""; try { String path = "E:\\IDEAFile\\testgroovy\\src\\main\\resources\\groovy\\CallAnalysisImpl.groovy"; context = FileUtils.readFileToString(new File(path));//将脚本内容转为字符串 } catch (IOException e) { log.error("file is not found[{}]", e); } return context; } /** * . * 执行groovy脚本 * * @param script */ public static void execGroovy(String script) { try { CallAnalysis objClass = GroovyUtils.instanceTaskGroovyScript(script);//获取实例对象 objClass.load();//调用脚本方法 } catch (Exception t) { log.error("execGroovy file {} error", script); } } /** * . * main方法 * @param args */ public static void main(String[] args) { System.out.println("=================="); CallAnalysisGroovyTask task = new CallAnalysisGroovyTask(); String script = task.getGroovy();//获取脚本 execGroovy(script);//实例化脚本,执行方法 System.out.println("=================="); }}
4.Groovy特性验证
利用Groovy脚本特性,不重启服务,实时修改数据
第一步:将之前Groovy脚本数据修改。存于数据库表中,动态加载脚本
@Slf4jclass CallAnalysisImpl implements CallAnalysis { private int anInt = 10; private int bnInt = 10; @Override void load() { log.info("当前类:[{}]", this.getClass().getName()) log.info("我被Groovy脚本加载...") log.info("计算结果:[{}]", (anInt + bnInt)) }}第二步:数据库表中:添加、查询Groovy脚本,动态加载执行
/** * . * 读取脚本,进行入库操作 * * @return */ @GetMapping("/saveScript") public String saveScript() { String scriptStr = callAnalysisGroovyTask.getGroovy(); Script script = newScript();//实体类对象 script.setScript(scriptStr);//脚本内容 script.setRuleId("1");//规则id script.setScriptName("演示一");//脚本名称 service.save(script); return "添加成功"; } /** * . * 从数据库表中,动态获取脚本 * * @param ruleId 规则id * @return 脚本内容 */ @GetMapping("/groovy") public String groovy(final String ruleId) { Script scr = scriptService.findScriptByRuleId(ruleId);//根据规则id查询 String scriptStr = scr.getScript(); callAnalysisGroovyTask.execGroovy(scriptStr); return scriptStr; }添加结果:

查询结果、控制台执行结果:
第三步:多次修改表数据值,查看执行结果
以上是"Java动态脚本Groovy的特性是什么"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
脚本
动态
内容
特性
数据
结果
装载
方法
实例
对象
数据库
文件
篇文章
规则
查询
代码
地方
就是
源代码
网络
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器组装机
mysql查询一条数据库
黑暗到密码手机钱网络技术
如何免费开启手机基岩版服务器
软件开发有广西哪些小公司
云播种互联网科技
通州区网络技术咨询采购
广州福盈网络技术有限公司
网络安全板块股票尾盘
胜利足球欧赔数据库下载
四川大学网络安全学院王老师
数据库信息安全毕业论文
淄博党员教育软件开发系统
网络安全志愿者要去派出所报道吗
已备案域名怎么转腾讯服务器
软件开发简历包装
数据库异常掉电
游戏嵌入式软件开发
马鞍山网络技术公司招聘
批量修改数据库的图片
银行软件开发生产问题分析会
泰兰德服务器
嘀嗒软件开发
山东服务器管理系统云服务器
纵横互联网科技有限公司
数据库 建表
法治课网络安全案例
江苏什么软件开发服务值得推荐
恶作剧黑客进服务器
学信网服务器