ognl表达式 获取所有对象_OGNL使用指南-01

ea70c9ed2cf723f015f40679cc3bca76.png

1. ognl是什么

ognl,全称Object Graphic Navigation Language(对象图导航语言),根据约定的一些简单的规则,组装一个利于阅读、可执行的表达式语句

2. ognl表达式官方指南:

https://commons.apache.org/proper/commons-ognl/language-guide.html

3. root和context

root

root可以理解为是一个java对象,表达式所规定的所有操作都是通过root来指定其对哪个对象进行操作。

context

context可以理解为对象运行的上下文环境,context以map的结构,利用键值对关系来描述对象中的属性以及值。

4. 对象定位

java是面向对象的开发语言,所以ognl表达式有3种方式获取对象

4.1 访问静态对象的「属性」和「方法」

  • 语法
//@开头// 访问静态属性@类名@属性名// 调用静态方法@类名@方法名(参数)
  • demo
@Testpublic void getPropertyValueFromStaticObj() throws Exception {    // 获取静态属性    // 格式:@类名@属性名    Object value = Ognl.getValue("@java.lang.Long@MAX_VALUE", null);    Assertions.assertEquals(Long.MAX_VALUE, value);}@Testpublic void callStaticMethod() throws Exception {    // 调用静态方法    // 格式:@类名@方法名    Object value = Ognl.getValue("@java.lang.String@valueOf('时间有限IT')", null);    Assertions.assertEquals("时间有限IT", value);}

4.2 访问对象属性(从root/context中访问)

  • 语法
// 「#」开头,「.」作为连接符#对象.属性名#对象.方法名()// root对象可以省略,直接访问属性"属性名"
  • demo
@Testpublic void getPropertyValueFromRootObj() throws Exception {    // init ognl context    User rootUser = new User("时间有限IT", 18);    Map context = Maps.newHashMap();    context.put("jack", new User("jack", 19));    context.put("rose", new User("rose", 20));    OgnlContext oc = new OgnlContext();    oc.setRoot(rootUser);    oc.setValues(context);    // 如果直接填写「属性」,默认就是root中获取    Object nameFromRoot = Ognl.getValue("name", oc, oc.getRoot());    Assertions.assertEquals("时间有限IT", nameFromRoot);    // root对象默认的属性名:root    // # : 访问对象    // #root : 访问属性名为root的对象    Object nameFromRootV2 = Ognl.getValue("#root.name", oc, oc.getRoot());    Assertions.assertEquals("时间有限IT", nameFromRootV2);    // 调用方法    Object sayReturn = Ognl.getValue("#root.say()", oc, oc.getRoot());    Assertions.assertEquals("时间有限IT say hello", sayReturn);    // 调用context方法    Object jackSayReturn = Ognl.getValue("#jack.say()", oc, oc.getRoot());    Assertions.assertEquals("jack say hello", jackSayReturn);}@Data@AllArgsConstructorpublic class User {    private String name;    private int age;    public String say() {        return name + " say hello";    }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值