1.intercept 方法中的 Object o 是代理类对象System.out.println(o); 会循环调用toString();cglib生成的代码toString代码:
final String CGLIB$toString$2() {return super.toString();}public final String toString() {MethodInterceptor var10000 = this.CGLIB$CALLBACK_0;if (var10000 == null) {CGLIB$BIND_CALLBACKS(this);var10000 = this.CGLIB$CALLBACK_0;}return var10000 != null ? (String)var10000.intercept(this, CGLIB$toString$2$Method, CGLIB$emptyArgs, CGLIB$toString$2$Proxy) : super.toString();}var1000 始终不为空,所以一直调用intercept循环。
原来的类 toString 也被cglib intercept方法 代理了,
所以 在 intercept 方法中 调用 代理对象o.toStringintercetp => toString => intercept => toString => ......toString 被代理了 !!! 由此可知,最好不要在intercept中调用 o 对象的方法,
因为o 代理对象,所有的方法都被 intercept 代理了, 一调用就循环!!!2.也不能调用method.invoke 也有类似的错误,原因暂时未探。method 是原来未被代理类的方法,不是代理类的method3.调用 methodProxy.invokeSuper(o,objects); 是正确的!
package com.xy.annotaion.handler.interceptor;import com.xy.annotaion.handler.util.Pointer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** @author Dell*/
public class TestCglibMethodInterceptor implements MethodInterceptor {@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
//        Pointer.lg("public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable");
//        Object ret = methodProxy.invoke(o,objects);
//        Pointer.lg("end");//errror o is proxy,so call toString stack overflow//
//        Pointer.lg(o);
//        System.out.println(o);Pointer.lg(method);Pointer.lg(objects);Pointer.lg(methodProxy);methodProxy.invokeSuper(o,objects);return "123";}
}

Cglib StackOverflowErrror相关推荐

  1. 支撑Java框架的基础技术:泛型,反射,动态代理,cglib

    以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...

  2. 支撑Spring的基础技术:泛型,反射,动态代理,cglib等

    1.静态代码块和非静态代码块以及构造函数 出自尚学堂视频:<JVM核心机制 类加载全过程 JVM内存分析 反射机制核心原理 常量池理解> public class Parent {stat ...

  3. JDK动态代理和Cglib的动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 最简单的是静态代理方法,即代理模式,这里就不多啰嗦了.. 重点说一下JDK的动态代理和Cglib的动态代理吧 先说JDK的,需 ...

  4. cglib代理的使用

    一.什么是CGLIB? 总的来说,无论是cglib.jdk动态代理又或者是aop面向切面编程,都运用到了一个最重要的设计模式--代理模式!万变不离其终,学好代理模式,打遍天下无敌手! cglib就是一 ...

  5. 面试官:说说Spring AOP、AspectJ、CGLIB ?它们有什么关系?

    欢迎关注方志朋的博客,回复"666"获面试宝典 AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务 ...

  6. Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件,取出 ...

  7. 面试官:Spring AOP、AspectJ、CGLIB 都是什么鬼?它们有什么关系?

    AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等. AOP 实现的关键就在 ...

  8. 你必须会的 JDK 动态代理和 CGLIB 动态代理

    来自:ytao 我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性.通过从静态代理.JDK 动态代理.CGLIB 动 ...

  9. 代理详解 静态代理+JDK/CGLIB 动态代理实战

    1. 代理模式 代理模式是一种比较好理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对 ...

最新文章

  1. 如何理解Transformer论文中的positional encoding,和三角函数有什么关系?
  2. BZOJ 2208[Jsoi2010]连通数
  3. 用SwipeBackLayout让activity具有滑动返回的效果
  4. javascript调用dll_Blazor条码识别:Web中运行C#和JavaScript
  5. modbus rtu 协议转DLT645-2007和DLT645-1997电表协议转换器定制,
  6. MYSQL描述选课系统的问题与_mysql+php实现选课系统中遇到的问题及解决方法
  7. 在线求CR,你觉得我这段Java代码还有优化的空间吗?
  8. 人与人之间交往最重要的是什么?
  9. JDBC连接效率问题
  10. 智能优化算法:猫群优化算法-附代码
  11. 我是如何从蛋壳的虎口里维权的?
  12. WAP PUSH解析(1)——SMS PDU编码
  13. 华为手机android怎么解锁,怎么查看华为手机解锁
  14. 奇偶校验方法(韦根协议)
  15. python数据可视化之Matplotlib
  16. 现代计算机系统必须配置的核心,第一章 计算机系统概述
  17. P - Balanced Stone Heaps
  18. 简易单片机制作频率计
  19. 单片机的c语言ppt,第9章-单片机的C语言编程.ppt
  20. 搞一下CP AUTOSAR 入门 | 07 CP AUTOSAR ComM 详解

热门文章

  1. uniapp前端微信h5支付
  2. 快速集成APP注册页面免费获取短信验证码功能
  3. typora+picgo+gitee自动快速上传图片实现云端存储
  4. line-clamp
  5. 通信工程大一新生指南
  6. 2019年全球品牌500强出炉:科技企业承包前7名,华为排12
  7. 股票训练软件几款介绍
  8. VC中调用并获取外部程序输出
  9. 笔记本电脑插入网线显示未识别的网络,如何解决?
  10. 高中计算机会考可以补考吗,高中会考不及格可以进行补考的,一共能补考多少次...