专业的编程技术博客社区

网站首页 > 博客文章 正文

Java:jdk与cglib动态代理详解及代码实践 #互联网

baijin 2024-09-04 02:03:20 博客文章 10 ℃ 0 评论

Jdk动态代理与Cglib动态代理。

本次分享会分别介绍jdk及cglib动态代理的实现原理,并通过实力代谢码向大家演示,如何在项目中使用它们,最后会总结二者的特点以及相互间的区别。

在这之前先回顾一下什么是代理模式,代理模式就是给某一个对象提供一个代理,并由代理对象控制原对象的引用。代理对象在客户端和目标对象之间,起到中介作用。图中是代理模式的,通用类图概念比较抽象,举个例子,假设你要去吃饭,你可以选择自己在家做饭,然后吃饭,最后刷碗,所有的事情都自己做。

也可以选择去餐厅,自己只管吃饭,把做饭和刷碗的活都交给代理对象,也就是餐厅的工作人员。类图中subject就是定义吃饭行为的接口,real subject就是自己代理对象,就是代理。

先来看一下jdk的动态代理,主要包含以下几个重要角色。我们知道jdk的动态代理的机制只能代理实现了接口的类,所以必须要先定义一个接口,然后接口中定义被代理对象要实现的方法。再者就是proxy类,要用proxy to proxy instance方法之后,可以产生一个proxy类的实例及代理对象,代理类的实力都需要关联一个handler。

当通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由耵聍cation·handler这个接口的 Tam方法来进行调用。一共接受三个参数,proxy就是jdk动态生成的最终代理对象。原理就是所要调用真实对象的某个方法的method,对象arx表示的是调用真实对象某个方法时接受的参数。

接下来通过一段演示代码来加强一下对jdk动态代理的理解,这里方便意见,把所有的接口和类都写到了一个文件中实际开发。还是要做好区分,代码与先前的类图和粒子做对应。

首先定义一个接口,subject接口中只定义了一个方法及吃饭。接着是一个实现类,也就是要去吃饭的自己的实力,it方法实现中就输出了一句话,自己只管吃饭。再接着就是要让代理类帮做饭,刷碗。前面提到代理类的实力都需要关联了一个handler。

原有方法最终通过handler 的F2方法来调用。重写 evok 方法,时会调用原有对象,target,也就是yourself实力的方法。同时可以把做饭,刷碗的事情加进去。这里也是只做了简单的输出,做饭,自己吃饭,刷碗。

最后是通过代理调用增强后的方法,代理的创建,new proxy instance,需要三个参数,分别是目标对象的类加载器,目标对象的实线接口以及关联的 handler编辑器。

方法中也就是整个实线的主流程,创建对象,创建代理类调用增强方法。最后运行一下,自己吃饭,餐厅干活,一切正常。

以上就是jdk动态代理的分享,cg lip,静待下期。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表