手机版

Java执行JS脚本工具

时间:2021-08-28 来源:互联网 编辑:宝哥软件园 浏览:

Java执行JS脚本工具

目的:为了方便系统的扩展,提供了JS脚本的功能,在系统中执行脚本可以获得更复杂的功能。

例如,系统提供了一个接口。接口不用实现类,可以用JS实现,运行时加载JS脚本。只要能整合,还有很多地方可以利用。

先看最基本的工具类

其实有这样的工具类就够了,下面的例子也是基于这个工具类。

本守则的原则:

在Java javascript引擎中,List、Map等常见复杂对象的属性值不能直接在js中使用。因此,遍历此处参数的所有键,通过Gson将值转换为Json字符串,然后执行var key={.}通过eval执行后,有一个遍历键值可以在引擎中使用。经过这种转换,复杂的对象可以应用到js引擎中。

提示:

可以传递:bindsbs=engine . getbindings(script context . engine _ scope);获取脚本引擎范围内的所有变量。

也可以把Java中的对象绑定到引擎,调用对象的方法,比如Dao,Service应该没问题,也可以尝试调用数据库方法。

如果你想使用一个对象的属性,你需要以上面的方式使用它们。

下面是使用此工具类的一个简单示例。

通过JS实现Java接口

这只是一个简单的例子,在MyBatis接口的简单实现原理中引入了动态代理的原理,但是这个例子并没有实现MyBatis那样强大的功能。为了演示,这里的Java是一个单一的接口方法。

代理类

脚本需要在这个类中传递,接口方法参数需要用@JsParam注释。convertArgs方法将参数转换为适合JSUtil工具类的Map类型,然后传入脚本和参数以供执行。执行后,返回值类型由ConvertUtils工具转换,最后返回结果。

@JsParam注释

因为较低版本的Java无法获取参数名,所以只能通过简单的标注来获取名称。

这里注释设置的名称是可以在我们的脚本中直接使用的参数。

代理工厂

一个简单的工厂类。

试验码

测试接口

注意:界面很简单,但是参数类型可以是一个复杂的对象,比如ListUser。您可以使用JSON脚本中的所有值。

试验码

请注意,脚本中的num1和num2必须与接口中定义的注释名称一致。

更特别的可以是这样一个剧本:

var sum=num1 num2总和;这里我们需要注意如何返回值,也就是在底部写上要返回的值。不能写成返回和;我不知道这和函数式编程有什么关系。如果有懂的人,请留言回复。

输出结果

100

最后的

虽然这个例子没有直接的使用意义,但是其中包含的原理可以帮助你设计JS脚本函数。在Java中,很容易实现Js作为扩展方法。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接

版权声明:Java执行JS脚本工具是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。