关于java代码中执行js脚本

应用场景:java语言是静态语言,执行时需要预编译。所以在一些需求变换比较频繁的时候使用起来就不是特别方便了。并且本人在用数据库的存储过程的时候也遇到了每个客户的需求不一致,导致需要频繁的修改存储过程里面的代码,所以想着有什么方法能有解决这个问题。经过本人找寻资料总结代码如下:

一、先编写一个js脚本信息 

function encodeInp(input){
	var s="js文件输出:"+input;
	return s;
}

 二、首先要创建一个js函数对应的接口,来映射js函数

public interface JSMethods {

    String encodeInp(String input);

}

三、加载js文件,并且将文件映射到接口上 

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileNotFoundException;
import java.io.FileReader;

/**
 * @author lihao
 * @create 2022-08-30 9:47
 * @desc
 **/
public class JavaScriptProvider<T> {

    public T loadJs(String jsName,Class<T> clazz) throws FileNotFoundException, ScriptException {
        //创建一个脚本引擎管理器
        ScriptEngineManager manager = new ScriptEngineManager();
        //获取一个指定的名称的脚本管理器
        ScriptEngine engine = manager.getEngineByName("js");
        //获取js文件所在的目录的路径
        String path = JavaScriptProvider.class.getResource("").getPath()+"/js/";
        //engine.eval(new FileReader(path+jsName+".js"));
        engine.eval(new FileReader(jsName));
        //从脚本引擎中返回一个给定接口的实现
        Invocable invocable = (Invocable) engine;
        return invocable.getInterface(clazz);
    }


    public static void main(String[] args) {
        try {
            JavaScriptProvider<JSMethods> jsProvider = new JavaScriptProvider<>();
            JSMethods jsMethods = jsProvider.loadJs("C:\\Users\\Administrator\\Desktop\\config.js",JSMethods.class);
            System.out.println(jsMethods.encodeInp("123"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (ScriptException e) {
            e.printStackTrace();
        }

    }

}

运行结果:

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦兜没有兜111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值