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
訪問都正常了。