【janino】janino 加载自定义函数

在这里插入图片描述

1.背景

想使用janino 加载自定义函数。我是这么做的,开始的做法

【janino】janino自定义函数报错A method named “xx” is not declared in any enclosing class nor through a static

后来尝试

@Test
    public void janinoPerformanceTest2_1() throws Exception {

        String rule = "containsIgnoreCase(requestUrl,\"securityEyeLogType\")";

        IExpressionEvaluator evaluator = CompilerFactoryFactory.getDefaultCompilerFactory().newExpressionEvaluator();
        evaluator.setExpressionType(boolean.class);
        evaluator.setExtendedClass(JaninoContainsIgnoreCaseFunction.class);
        //        evaluator.setDefaultImports(new  String[]{
//                "static com.janino.demo.function.JaninoContainsIgnoreCaseFunction"
//        });
//        evaluator.setClassName("com.janino.demo.function.JaninoContainsIgnoreCaseFunction");
//        evaluator.setStaticMethod(true);
        evaluator.setParameters(
                new String[]{"requestUrl"},
                new Class[]{String.class}
        );
        evaluator.cook(rule);

        Object[] arguments = {"securityEyeLogType"};
        Object res = evaluator.evaluate(arguments);
        System.out.println(res);

    }

上面注释的都不能加载静态函数,函数如下

public class JaninoContainsIgnoreCaseFunction {

    public static boolean containsIgnoreCase(String field, String target) {
        if (field.toLowerCase().contains(target.toLowerCase())) {
            return true;
        } else {
            return false;
        }
    }

}

这样子就可以了。

原创文章 1444 获赞 480 访问量 175万+

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/106099855