除了可以用 AviatorScript 来定义模块之外,也可以用 Java 来定义。 Java 实现模块就是一个普通的 Java 类,它的所有静态方法将作为模块方法提供。

    我们来实现一个最简单的 str 模块:

    1. @Import(ns = "str")
    2. public static class StringModule {
    3. public static boolean isBlank(final String s) {
    4. return s == null || s.trim().length() == 0;
    5. }
    6. }

    Import annotation 指定了模块的 namespace 名称为 str ,提供了一个静态方法 isBlank(s) 来判断字符串是否是空白的。

    接下来我们使用 addModule 来添加模块到执行引擎:

    1. AviatorEvaluator.getInstance().addModule(StringModule.class);

    添加之后,就可以用 require 来加载模块,并在脚本里使用:

    1. String script = "let str = require('str'); str.isBlank(s) ";
    2. System.out.println(AviatorEvaluator.execute(script, AviatorEvaluator.newEnv("s", "hello")));
    3. System.out.println(AviatorEvaluator.execute(script, AviatorEvaluator.newEnv("s", " ")));
    4. System.out.println(AviatorEvaluator.execute(script, AviatorEvaluator.newEnv("s", null)));

    输出 :

    1. false
    2. true
    3. true

    你可以使用类似的方法来自定义模块。