在 Java 里,“Proxy 代理”通常有两种常见含义,调试方式不太一样:
java.lang.reflect.Proxy)JDK 动态代理在运行时生成 .class 文件,默认不会落盘。
方式一:JVM 参数(推荐)
-Dsun.misc.ProxyGenerator.saveGeneratedFiles=true
(Java 8 及以前)
-Djdk.proxy.ProxyGenerator.saveGeneratedFiles=true
(Java 9+)
生成的代理类在:
com/sun/proxy/$ProxyN.class
用 IDEA / jd-gui / cfr 反编译:
$Proxy1 extends Proxy implements YourInterface {
public void doSomething() {
h.invoke(this, m3, null);
}
}
public Object invoke(Object proxy, Method method, Object[] args) {
// 在这里断点
System.out.println(method.getName());
return method.invoke(target, args);
}
System.out.println("before: " + method.getName());
Object result = method.invoke(target, args);
System.out.println("after: " + method.getName());
System.out.println(obj.getClass().getName());
// 类似:com.xxx.Service$$EnhancerByCGLIB$$...
-Dcglib.debugLocation=/tmp/cglib
会生成 .class 文件,可反编译。
logging:
level:
org.springframework.aop: DEBUG
@Around / @Before 中打断点AopUtils.isAopProxy(bean);
AopUtils.isCglibProxy(bean);
AopUtils.isJdkDynamicProxy(bean);
如果你是问 网络代理调试:
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");
System.out.println(System.getProperty("http.proxyHost"));
-Djavax.net.debug=all
this.xxx() 不会走代理如果你能说明是 哪一种 Proxy(动态代理 / Spring AOP / 网络代理),我可以给你更具体的调试步骤。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。