如下, 使用静态变量保存 ApplicationContext
package com.xxx.restful.controller;
@Controller
public class LoginController implements ApplicationContextAware {
public static ApplicationContext staticApplicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
staticApplicationContext = applicationContext;
}
}
利用 Arthas 获取 ApplicationContext
[arthas@25591]$ ognl '@com.xxx.restful.controller.LoginController@staticApplicationContext'
报如下错误:
查询了一下Arthas关于 ognl 的使用 ognl 的使用 ,发现可以指定加载类的类加载器(classload),
[arthas@25591]$ classloader -t
+-BootstrapClassLoader
+-sun.misc.Launcher$ExtClassLoader@b81eda8
+-com.taobao.arthas.agent.ArthasClassloader@11e05597
+-sun.misc.Launcher$AppClassLoader@70dea4e
+-org.springframework.boot.loader.LaunchedURLClassLoader@254989ff
+-org.codehaus.groovy.reflection.SunClassLoader@660acfb
于是不使用Arthas默认的类加载器,指定一下靠近应用层的类加载器就ok了
ognl -c 254989ff '@com.xxx.restful.controller.LoginController@staticApplicationContext' -x 2
- -c 为类加载器的hash值