Java中处理脚本语言(javax.script)

本文介绍了Java中对脚本语言的支持,主要集中在javax.script包中的接口和类,如ScriptEngine、ScriptEngineManager、ScriptEngineFactory等。ScriptEngine接口用于执行脚本,ScriptEngineManager负责脚本引擎的发现和实例化,ScriptEngineFactory则描述和实例化ScriptEngines。此外,文章还提到了ScriptContext、CompiledScript、Compilable和Invocable等概念,详细阐述了它们在Java脚本执行中的角色和功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java脚本语言概述

java.script 整体类关系图Java语言对脚本语言的支持都抽象在javax.script包中,并且实现规范为JSR223。从上图的类关系图中,我们知道整体抽象比较简单,下面我们就来详细分析一下Java对脚本语言的支持。

ScriptEngine

ScriptEngine是一个基本接口,在规范中要求,每个实现都必须全部实现该接口的方法。
主要包括执行脚步的方法和对值的获取和设置方法。

public interface ScriptEngine  {
    public static final String ARGV="javax.script.argv";
    public static final String FILENAME = "javax.script.filename";
    public static final String ENGINE = "javax.script.engine";
    public static final String ENGINE_VERSION = "javax.script.engine_version";
    public static final String NAME = "javax.script.name";
    public static final String LANGUAGE = "javax.script.language";
    public static final String LANGUAGE_VERSION ="javax.script.language_version";
    
    public Object eval(String script, ScriptContext context) throws ScriptException;
    public Object eval(Reader reader , ScriptContext context) throws ScriptException;
    public Object eval(String script) throws ScriptException;
    public Object eval(Reader reader) throws ScriptException;
    public Object eval(String script, Bindings n) throws ScriptException;
    public Object eval(Reader reader , Bindings n) throws ScriptException;

    public void put(String key, Object value);
    public Object get(String key);

    public Bindings getBindings(int scope);
    public void setBindings(Bindings bindings, int scope);
    public Bindings createBindings();
    
    public ScriptContext getContext();
    public void setContext(ScriptContext context);
    
    public ScriptEngineFactory getFactory();
}

ScriptEngineManager

ScriptEngineManager实现了ScriptEngine类的发现和实例化机制,还维护了一个键/值对集合,存储由Manager创建的所有引擎共享的状态。该类使用服务提供程序机制枚举ScriptEngineFactory的所有实现。

ScriptEngineManager提供了一个方法来返回所有这些工厂的列表,以及根据语言名称、文件扩展名和mime类型查找工厂的实用方法。

由管理器维护的键/值对绑定称为“全局作用域”,对ScriptEngineManager创建的ScriptEngine的所有实例都可用。绑定中的值通常在所有脚本中公开。

ScriptEngineFactory

ScriptEngineFactory用于描述和实例化ScriptEngines。

每个实现ScriptEngine的类都有一个相应的工厂,该工厂公开描述引擎类的元数据。

ScriptEngineManager使用Jar文件规范中描述的服务提供程序机制来获取当前ClassLoader中可用的所有ScriptEngineFactories的实例。

ScriptContext

该接口的实现类用于在托管应用程序中将脚本引擎与对象(如作用域绑定)连接起来。每个作用域都是一组已命名的属性,可以使用ScriptContext方法设置和检索这些属性的值。ScriptContexts还公开了可由ScriptEngines用于输入和输出的reader和writer。

CompiledScript

由存储编译结果的类扩展。状态可以以Java类、Java类文件或脚本语言操作码的形式存储。脚本可以重复执行而不需要重新解析。

每个CompiledScript都与一个ScriptEngine相关联——调用CompiledScript的eval方法会导致ScriptEngine执行脚本。由CompiledScript的执行引起的ScriptEngine状态的变化可以在引擎后续执行脚本时看到。

Compilable

ScriptEngines实现的可选接口,它的方法将脚本编译为可以重复执行而无需重新编译的表单。

Invocable

由ScriptEngines实现的可选接口,其方法允许调用之前执行过的脚本中的过程。

Bindings

键/值对的映射,所有键都是string类型的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值