动态代理之CGLib
jdk动态代理和cglib动态代理。两种方法同时存在,各有优劣。
jdk动态代理是由Java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。
总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,这样解决asm生成类过程低效问题),cglib动态代理中生成的字节码更加复杂,生成的代理类是委托类的子类,且不能处理被final关键字修饰的方法。
还有一点必须注意:jdk动态代理的应用前提,必须是目标类基于统一的接口。如果没有上述前提,jdk动态代理不能应用。由此可以看出,jdk动态代理有一定的局限性。

实现步骤:
1 定义被代理类

public class XiangQin {public void xiangQin(){System.out.println("隔壁老王去相亲。。。。。。。");}}

2 实现MethodInterceptor接口,定义方法的拦截器

需要的maven依赖
<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2</version>
</dependency>import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;  public class CglibProxy implements MethodInterceptor{// 被代理对象Object targetObject;//动态生成一个新的类,使用父类的无参构造方法创建一个指定了特定回调的代理实例public Object getProxyObject(Object object) throws Exception{targetObject = object;Enhancer enhancer = new Enhancer ();//设置生成类的父类类型enhancer.setSuperclass(this.targetObject.getClass());  enhancer.setCallback(this);return enhancer.create();}@Overridepublic Object intercept(Object arg0, Method method, Object[] arg2, MethodProxy proxy) throws Throwable {Object o = null;before();o = proxy.invokeSuper(arg0, arg2);after();return o;}public void before(){System.out.println("相亲前先打扮一下。。。。");}public void after(){System.out.println("相亲完毕。。。。");}}

3 生成代理对象并测试

public static void main(String[] args) {XiangQin xiangQin = (XiangQin) new CglibProxy().getProxyObject(new XiangQin());xiangQin.xiangQin();}

动态代理之CGLib相关推荐

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

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

  2. Proxy 动态代理 InvocationHandler CGLIB MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. aop的四种增强以及JDK动态代理、Cglib动态代理

    动态代理 AOP底层实现:有接口自动应用的就是JDK动态代理 (1).JDK 在运行时运行时注入 本质:在内存中构建出接口的实现类 特点:被代理对象,必须有接口 实例: import java.lan ...

  4. jdk动态代理与cglib动态代理例子

    1.JAVA的动态代理特征:特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象 ...

  5. 代理模式 、JDK动态代理、cglib动态代理

    代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢? 因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思. 再如我 ...

  6. spring-6、动态代理(cglib 与 JDK)

    JDK动态代理与Cglib动态代理 JDK动态代理: 1.能够继承静态代理的全部优点.并且能够实现代码的复用. 2.动态代理可以处理一类业务.只要满足条件 都可以通过代理对象进行处 理. 3.动态代理 ...

  7. 动态代理,动态代理设计模式 ,JDK动态代理,cglib动态代理

    为什么80%的码农都做不了架构师?>>>    一:在看此篇代码示例前,先看静态代理, 链接地址:http://my.oschina.net/dyyweb/blog/656760   ...

  8. Java动态代理之cglib

    转载自 Java动态代理之cglib cglib是对jdk动态代理的补充,弥补了因没有接口的类生成代理类的缺失.  下面通过简单的例子学习一下cglib的使用,当然,要是用需要第三方的jar包,jar ...

  9. 一文理解JDK静态代理、JDK动态代理、Cglib动态代理

    代理模式 通过代理来访问真实的对象,而不是直接去访问真正干活的对象,比如二房东租房,二房是代理者,而一房东才是真正的房东:或者说生活中的中介.Spring中的AOP就是动态代理 适用场景 需要动态修改 ...

  10. JDK 动态代理与 CGLIB 动态代理,它俩真的不一样

    摘要:一文带你搞懂JDK 动态代理与 CGLIB 动态代理 本文分享自华为云社区<一文带你搞懂JDK 动态代理与 CGLIB 动态代理>,作者: Code皮皮虾 . 两者有何区别 1.Jd ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第8期)
  2. 常见的 IO 模型有哪些?Java 中 BIO、NIO、AIO 的区别?
  3. IDEA 中的神奇插件:防沉迷、防猝死...
  4. 渐进式迭代教学法--PHP
  5. mybatis复杂查询环境 多对一的处理 按照结果嵌套处理和按照查询嵌套处理
  6. Javascript 事件propagation机制
  7. 科技前沿智能创新 2019北京智能家居 全屋智能博览会
  8. [html] 你是如何区分HTML和HTML5的?
  9. Spring Security Oauth2 (五) 密码码模式 整合jwt
  10. 80后智能科技公司诚聘业务人员
  11. paip.c#图片裁剪
  12. 教你如何提取小程序素材无水印解析下载视频号视频
  13. Linux操作系统加固
  14. 某CV四小龙继续裁员,AI独角兽还可以去吗?
  15. 小米官网jQuery重构
  16. tensorflow构建神经网络回归分析可视化
  17. log文件过大处理方法
  18. C语言阶段小项目(火车购票系统)
  19. javaw.exe是什么进程?
  20. 初中数学503个必考知识点_初中数学|必考的21个知识点

热门文章

  1. Arcgis for JS之对象捕捉
  2. 企业里最重要的“自燃人”
  3. 立即停止训练比 GPT-4 更强的模型,至少六个月!马斯克、图灵奖得主等数千 AI 专家紧急呼吁
  4. 学生党福利!学习python电脑及配置大盘点,游戏学习两不误
  5. 深度|加密技术如何对付量子计算机
  6. UG NX 10 拔模
  7. 雷军:我也焦虑啊,一天开了23个会!
  8. 如何解决网站提示“不安全”?
  9. 1964年 东京 第十八届奥运会
  10. 对于大型网站 需要从用户角度去做seo