ognl_ognl用于什么_java(3)

电脑杂谈  发布时间:2017-02-16 12:32:16  来源:网络整理

(2)把root设置到result 中,root是person对象。ognl

到这里其实复杂的逻辑没有,但是很重要,到这里,前面的几步主要是准备了ognl的三要素:

(1).expression求值表达式——首先会被解析成对象树:tree

(2).rootobject 根对象——默认的操作对象:root

(3).contextOGNL执行环境——OGNL执行的上下文环境:createDefaultContext(root)

4、getValue( tree, createDefaultContext(root), root, resultType ) 代码:

  public static Object getValue( Object tree, Map context, Object root, Class resultType ) throws OgnlException
    {
        Object          result;
        OgnlContext     ognlContext = (OgnlContext)addDefaultContext(root, context);

        result = ((Node)tree).getValue( ognlContext, root );
        if (resultType != null) {
            result = getTypeConverter( context ).convertValue( context, root, null, null, result, resultType);
        }
        return result;
    }

注释:(1)(OgnlContext)addDefaultContext(root, context)获取ognl上下文,请参照步骤3.2

(3)tree是SimpleNode类型,根据ognl上下文和root对象,获取值

5、SimpleNode.java --getValue()代码:

 public final Object getValue( OgnlContext context, Object source ) throws OgnlException
    {
        if (context.getTraceEvaluations()) {
            EvaluationPool  pool = OgnlRuntime.getEvaluationPool();
            Object          result = null;
            Throwable       evalException = null;
            Evaluation      evaluation = pool.create(this, source);

            context.pushEvaluation(evaluation);
            try {
                result = evaluateGetValueBody(context, source);
            } catch (OgnlException ex) {
                evalException = ex;
                throw ex;
            } catch (RuntimeException ex) {
                evalException = ex;
                throw ex;
            } finally {
                Evaluation      eval = context.popEvaluation();

                eval.setResult(result);
                if (evalException != null) {
                    eval.setException(evalException);
                }
                if ((evalException == null) && (context.getRootEvaluation() == null) && !context.getKeepLastEvaluation()) {
                    pool.recycleAll(eval);
                }
            }
            return result;
        } else {
            return evaluateGetValueBody(context, source);
        }
    }
注释:context.getTraceEvaluations()创建ognl上下文时候traceEvaluations= false;在上面的过程中没有设置 traceEvaluations,所以获取的值为false。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32760-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...