Java执行JS脚本工具
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或者邮箱删除。