ognl_ognl用于什么_java(7)

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

注释:(1)getPropertyAccessor()方法调用getHandler( cls, propertyAccessors ),参数cls就是上面获取的class Person,propertyAccessors是OgnlRuntime类声明的静态变量。

(2)getHandler()方法首先在handlers查找时候有和class Person对象的属性访问器,如果有直接返回。

(3)重要的代码是for循环,首先查看当前的class在handlers是否有相应的值,如果没有获取当前calss的实现的接口,在查看这些接口是否有相应的值。

如果上面都没有找到,获取父类对象,然后再次遍历。

参数cls就是上面获取的class Person,没有实现别的接口,也没有继承其他的类。那属性访问器是怎么获得呢?

所有的类都会继承object,handlers保存了和object相对的属性访问器了。那这个属性访问器是什么时候添加进来的呢?

请看OgnlRuntime类中的静态方法

  static
    {
        PropertyAccessor p = new ArrayPropertyAccessor();
        setPropertyAccessor( Object.class, new ObjectPropertyAccessor() );
        setPropertyAccessor( byte[].class, p );
        setPropertyAccessor( short[].class, p );
        setPropertyAccessor( char[].class, p );
        setPropertyAccessor( int[].class, p );
        setPropertyAccessor( long[].class, p );
        setPropertyAccessor( float[].class, p );
        setPropertyAccessor( double[].class, p );
        setPropertyAccessor( Object[].class, p );
        setPropertyAccessor( List.class, new ListPropertyAccessor() );
        setPropertyAccessor( Map.class, new MapPropertyAccessor() );
        setPropertyAccessor( Set.class, new SetPropertyAccessor() );
        setPropertyAccessor( Iterator.class, new IteratorPropertyAccessor() );
        setPropertyAccessor( Enumeration.class, new EnumerationPropertyAccessor() );
。。。。
    }
到这里,就获得了属性访问器,继续往下看,属性访问器是怎么获取值的。

9、ObjectPropertyAccessor类中getProperty( context, source, name )代码:

  public Object getProperty( Map context, Object target, Object oname ) throws OgnlException
    {
        Object              result = null;
        String              name = oname.toString();

        if ((result = getPossibleProperty(context, target, name)) == OgnlRuntime.NotFound) {
            throw new NoSuchPropertyException(target, name);
        }
        return result;
    }


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

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

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