分享好友 最新动态首页 最新动态分类 切换频道
Groovy编写规则引擎学习
2024-12-26 21:26

Groovy脚本引擎的执行本质只是接受context对象,然后基于context对象中的关键信息进行逻辑判断,输出结果。
参考文章
文章1
文章2
文章3
文章4

Groovy编写规则引擎学习

在java中运行Groovy脚本,有三种比较常用的类支持:GroovyShell、GroovyClassLoader 以及 Java-Script引擎(JSR-223).

GroovyShell
GroovyShell允许在Java类中(甚至Groovy类)求任意Groovy表达式的值。您可使用Binding对象输入参数给表达式,并最终通过GroovyShell返回Groovy表达式的计算结果。
通常用来运行"script片段"或者一些零散的表达式(Expression)

GroovyClassLoader
用 Groovy 的 GroovyClassLoader ,它会动态地加载一个脚本并执行它。GroovyClassLoader是一个Groovy定制的类装载器,负责解析加载Java类中用到的Groovy类。
如果脚本是一个完整的文件,特别是有API类型的时候,比如有类似于JAVA的接口,面向对象设计时,通常使用GroovyClassLoader.

GroovyScriptEngine
GroovyShell多用于推求对立的脚本或表达式,如果换成相互关联的多个脚本,使用GroovyScriptEngine会更好些。GroovyScriptEngine从您指定的位置(文件系统,URL,数据库,等等)加载Groovy脚本,并且随着脚本变化而重新加载它们。如同GroovyShell一样,GroovyScriptEngine也允许您传入参数值,并能返回脚本的值。

首先导入Groovy包

 

注意:我的是这样导入包的,否则编译运行时会报异常
参考解答:解决1 和 解决2
说白了就是springboot2.x版本和groovy2.5.x不能完全兼容。

该小节是在参考这篇文章后,加入一些自己的理解完成的。

在SpringBoot项目中,通过容器和依赖注入,可以很方便的实现开发功能。那么如何通过加载实例来动态编译脚本呢。
groovy支持通过GroovyShell预设对象,在groovy动态脚本中直接调用预设对象的方法。因此我们可以通过将spring的bean预设到GroovyShell运行环境中,在groovy动态脚本中直接调用spring容器中bean来调用其方法。

1、首先,自定义注解@GroovyFunction。用来标识用于绑定到GroovyShell的类。

 

2、service层用来编写自定义的方法,用@GroovyFunction注解标识该方法可以被绑定到GroovyShell中。

 

3、然后,利用SpringBoot中的Configuration类来设置Binding
首先配置类实现org.springframework.context.ApplicationContextAware接口,用来获取应用上下文。然后在配置从上下文获取到的指定Bean实例,并注入到groovy的Binding中。
这里,我是利用上文提到的@GroovyFunction注解来过滤需要的实例

 

4、然后,定义一个请求类
这个其实没啥好说的,因为我不会再controller层请求两个参数。

 

5、最后,在controller层中,实现动态脚本运行
注意:下面是我的一些想法和实现
(1)采用单例模式,将GroovyShell在初始化时就实例化出来。以后每次都直接调用该实例。
(2)通过依赖注入,将已经绑定自定义方法的Binding实例注入进来
(3)维护一个HashTable,用于存放~~<expression,Script>~~ 的映射关系,这样就可以重复利用已经实例化过的Script的实例。
(4)多个请求同时操作HashTable,所以需要注意线程安全问题。

 

6、利用AOP记录请求日志信息
(1)自定义注解

 

(2)定义切面和切点

 
 
 

2020-03-26
突然发现代码会有问题(GC和线程安全问题
详细内容参考

最新文章
淘宝店铺怎么做老顾客营销?
1、结合买家心理和收货期待,玩好宣传单在日常生活中,当我们收到宣传单可能不太会多关注,反而网上购物收到的货会比较关注,因为会对自己买的东西抱有强烈的期待,正是由于这份收货心理,关于买的产品,一些相关的传单会有很大几率去看。
Python 人狗大 CSDN:一个 Python 开发者的学习交流社区
Python 人狗大 CSDN 社区汇聚了来自世界各地的 Python 爱好者和专业开发者。无论是初出茅庐的新手,还是经验丰富的高手,都能在这里找到自己的位置。对于新手来说,这里是他们开启 Python 编程之旅的起点。丰富的入门教程、详细的基础知识
百度蜘蛛池效果:揭秘蜘蛛池推广词,如何高效利用蜘蛛池提升关键词排名
百度蜘蛛池推广词助力关键词排名提升,通过高效利用蜘蛛池,可迅速提升网站权重,优化搜索引擎排名。本文揭秘蜘蛛池推广词的使用方法,教你如何发挥蜘蛛池最大效用,实现高效关键词推广。本文目录导读:什么是蜘蛛池推广词蜘蛛池推广词的特
推广宝
推广宝竞价排名传统seo推广费用每年固定费用,无额外点击费,成本可控,高性价比。按点击量收费,竞争激烈的词,单次点击费用可达数元甚至数百元,一个词单月就要消费数千元甚至上十万元。按词付费,价格根据词的热度来决定,难度高的词优
谷歌Jules:新一代AI代码助手重塑开发者工作流程
在技术迅速发展的今天,人工智能的应用已经深入各行各业,尤其是在软件开发领域。谷歌于2024年12月12日推出的AI代码助手——Jules,标志着AI在开发者工具中应用的新里程碑。Jules不仅能够帮助开发者快速修复代码错误,还能优化每个程序员的
揭秘马尾区百度推广优化之道,企业品牌影响力提升攻略
马尾区企业通过深入优化百度推广策略,有效提升品牌影响力。策略涵盖关键词精准定位、内容创意优化、数据分析与调整,实现精准触达目标受众,增强品牌曝光度和用户互动,助力企业在线上市场脱颖而出。随着互联网的快速发展,已经成为企业提
宁波市商务局最新发展规划,打造开放型经济新高地
宁波市商务局最新发展规划致力于打造开放型经济新高地,通过深化商贸流通领域改革,加强内外贸一体化建设,推动跨境电商等新业态发展,优化营商环境等措施,促进经济高质量发展。规划旨在提升宁波市的国际影响力和竞争力,推动形成全面开放
让ai智能写个拍摄脚本的软件:推荐列表与盘点指南
随着数字媒体时代的到来,影视创作逐渐迈向高效与智能化。人工智能()在影视制作领域的应用日益广泛其是自动生成拍摄脚本的软件,成为了多创作者的得力助手。本文将为您盘点一系列免费且好用的脚本编写工具,帮助您轻松打造具有创意的拍摄
用AI生成美女写真,轻松打造你的个性化形象!
在这个科学技术飞速发展的时代,AI生成图像的能力已经颠覆了传统的图像创作方式。家人们,有没有想过通过人工智能生成一张属于自己的逼真美女写真?不再需要专业的摄影师或复杂的后期制作,这一切都可以通过一些简单的工具轻松完成。本篇文
百度推广的几种方式
百度推广的几种方式主要包括:搜索推广、信息流推广和品牌广告推广。搜索推广通过关键词竞价和优化,使企业网站或产品信息在搜索结果中排名靠前,提高曝光率和点击率。信息流推广则是在百度平台上展示广告,根据用户行为和兴趣进行精准推送
相关文章
推荐文章
发表评论
0评