【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;
        }
    }

}

這樣子就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章