【Arthas】命令之ognl使用姿势

| [c:] | 执行表达式的 ClassLoader 的 hashcode,默认值是SystemClassLoader |

| [x] | 结果对象的展开层次,默认值1 (如果对象里面包好对象,这个值大一点可以一起输出) |

使用示例


1.调用静态属性

ognl '@全路径类目@静态属性名'

示例:

ognl '@com.shirc.arthasexample.ognl.OgnlTest@static_str'

在这里插入图片描述

2.调用静态方法

ognl '@全路径类目@静态方法名("参数")'

示例一: 简单入参 返回普通对象

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18)' -X 1

在这里插入图片描述

示例二:简单入参 返回对象中包含对象和List

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18,2)' -x 1

在这里插入图片描述

-x 1 中的x是小写; 上面可以看到 child对象和childs列表都没有打印出来

试试 -x 2-x 3

在这里插入图片描述

-x 2 的时候对象属性有展开,但是列表没有, -x 3 才把列表展开了

示例三: 方法A的返回值当做方法B的入参

ognl '#value1=@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18), #value2=@com.shirc.arthasexample.ognl.OgnlTest@setPerson(#value1) ,{#value1,#value2}' -x 2

在这里插入图片描述

示例四:执行多行表达式,赋值给临时变量,返回一个List:

$ ognl ‘#value1=@System@getProperty(“java.home”), #value2=@System@getProperty(“java.runtime.name”), {#value1, #value2}’

@ArrayList[

@String[/opt/java/8.0.181-zulu/jre],

@String[OpenJDK Runtime Environment],

]

示例五: 方法入参是简单类型列表

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getChilds({"jinjidelaomanong","jjdlmn"})' -x 2

在这里插入图片描述

示例六: 方法入参是一个复杂对象

先用构造函数构造一个对象

ognl 'new com.shirc.arthasexample.ognl.Shirc("jjdlmn",true)'

然后把这个对象当做入参传入;所以最终可以这么写

ognl '#obj=new com.shirc.arthasexample.ognl.Shirc("jjdlmn",true),@com.shirc.arthasexample.ognl.OgnlTest@inputObj(#obj)' -x 2

在这里插入图片描述

示例七: 方法入参是一个Map对象

先构造一个Map对象可以这样

ognl '#{ "foo" : "foo value", "bar" : "bar value" }'

然后把这个对象赋值给一个变量; 最后把这个变量当做入参传入;

然后把这个对象当做入参传入;所以最终可以这么写

ognl '#inputmap=#{ "foo" : "foo value", "bar" : "bar value" }, @com.shirc.arthasexample.ognl.OgnlTest@getMap(#inputmap)' -x 2

在这里插入图片描述

3.读取不同类型的值

读取 复杂对象、List、Map等等值的方式

示例一:访问复杂对象属性

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18).name' -x 4

在这里插入图片描述

示例二、访问List或者数组类型

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getChilds({"jinjidelaomanong","jjdlmn"})[0]' -x 2

在这里插入图片描述

示例三: 访问Map对象

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"]' -x 2

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"].sex' -x 2

shirc: 是map的key; 记得要用双引号"" 引起来

在这里插入图片描述

Ognl 常用用法说明

#变量引用 #this 当前对象

OGNL的变量方案很简单, 你可以用变量来保存中间结果, 并在后面的代码中再次访问它, 也可以用变量来使整个表达式更加简单易懂. OGNL中的所有变量, 对整个表达式都是全局可见的. 引用变量的方法是在变量名之前加上 # 号

OGNL在计算表达式的过程中, 随时会将当前对象保存在 "this"变量中, 这个变量也可以象其他任何变量一样引用,用 #this 表示当前对象

例如:

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"].(#this.sex=="boy"?"BoyNB":"GirlNB")' -x 2

在这里插入图片描述

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
ava开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值