Java代理-JAVA动态代理,CGLIB动态代理

入职加上之前实习的时间快2个月了。学习到了很多的知识,但是在这个过程中也遇到了很多的困难。现在还在担心此后转正的问题。在学生阶段由于主要是做理论研究的,故在工程能力这一块优点欠缺。这一周,我刚刚被分到了其他的组,面对要离开之前带我老师,当时很激动,太囧了。行了,之前的算着一个小的日记,下面开始对之前的内容进行补充和完善。

代理分类

  1. 静态代理
  2. 动态代理( jdk动态代理,cglib,asm,javaassit)

静态代理

更多是一个设计模式
1、创建一个接口
2、创建一个接口的实现类
3、创建一个代理类,这个代理类也实现了上边的接口,但是将 要被代理的实现类传入到代理类中,在代理类的接口实现方法中调用,并在调用前后加上一些操作(上边的就是日志操作而已)

动态代理

JDK动态代理

  1. 需要接口
  2. 第二性能影响,因为动态代理使用反射的机制实现的,首先反射比直接调用要慢,经过测试大概每个代理类比静态代理多出10几毫秒的
  3. 生成新的类字节码文件。寄存在JVM的方法区中
    如果大量代理,JVM 方法区存放了类的相关信息.当加载到方法区的class太多的时候就可能会报出permgen溢出的错误。所以perm参数要适当调高,以免PERM去满的时候,频繁引起FULL-GC。(spring容器sington不会反复FULL-GC,但是会有OOM)

cglib动态代理(spring,powermock)

使用动态字节码增强,实现AOP。原理是在运行期间目标字节码加载后,将切面逻辑织入到新类中。一般选择继承delegate对象,所以使用cglib实现AOP不需要基于接口。
优点
使用动态字节码增强,实现AOP。原理是在运行期间目标字节码加载后,将切面逻辑织入到新类中。一般选择继承delegate对象,所以使用cglib实现AOP不需要基于接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值