package com.xs;
import ognl.OgnlException;
public class OgnlAccess {
/**
* @param args
* @throws OgnlException
*/
public static void main(String[] args) throws OgnlException {
Field field = new Field();
System.out.println(ognl.Ognl.getValue("publicField", field));
System.out.println(ognl.Ognl.getValue("privateField", field));
}
}
class Field{
public int publicField = 10;
private int privateField = 11;
}
输出:
10
Exception in thread "main" ognl.NoSuchPropertyException: com.xs.Field.privateField
at ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:151)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2210)
at ognl.ASTProperty.getValueBody(ASTProperty.java:114)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at ognl.SimpleNode.getValue(SimpleNode.java:258)
at ognl.Ognl.getValue(Ognl.java:494)
at ognl.Ognl.getValue(Ognl.java:644)
at ognl.Ognl.getValue(Ognl.java:702)
at ognl.Ognl.getValue(Ognl.java:672)
at com.xs.OgnlAccess.main(OgnlAccess.java:14)
可以看到 publicField字段正常输出,privateField报错。可见有访问权限的字段,无需getter方法,Ognl找不到getter方法会去直接访问字段;对于没有访问权限的字段则不能直接访问。
给privateField添加getter方法:
class Field{
public int publicField = 10;
private int privateField = 11;
public int getPrivateField() {
return privateField;
}
}
输出:
10
11
访问都正常了。