Java动态代理实例分析


这篇文章主要介绍“Java动态代理实例分析”,在日常操作中,相信很多人在Java动态代理实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java动态代理实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!”代理”这个词相信大家并不陌生,简单来说就是代替厂家来售卖商品,代理替代厂家售卖商品,顾客找代理购买商品。也就是说:1)顾客和厂家之间是不可见的,顾客不知道背后的厂家是谁。2)代理可以对顾客进行“定位”,更精确的售卖给需要的客户群体。代理模式:为其他对象提供一种代理以控制对这个对象的访问,也就是创建一个代理对象作为客户端和目标对象之间的中介,主要目的就是保护目标对象或增强目标对象通过使用代理模式,通常有以下两个优点:1) 可以隐藏被代理类的实现2) 可以实现客户与被代理类间的解耦,在不修改被代理类代码的情况下能够做一些额外的处理所谓的动态代理,就是通过声明一个明确的代理类来访问源对象,一个代理只能服务于一种产品,当有n种产品时,就需要n个代理,这样就不利于业务的发展。举例:我们有两个接口,Mouse和Keyboard,每个接口都有一个实现类实现类中的代码如下:现在我们要做的就是让代理在调用sell()前输出一句售前了解,调用后输出一句售后服务那我们只需写两个代理类MouseProxyKeyboardProxy最终执行为:输出:
售前了解
出售罗技鼠标
售后服务
售前了解
出售HHKB键盘
售后服务静态代理的代码非常简单易懂,这种模式虽好,但是也有明显的缺点:会存在大量冗余的代理类,这里只有两个接口,如果有n个接口,那么就要定义n个代理类。不易维护,一旦接口更改,代理类和被代理类都要更改。那么这个免费云主机域名时候就可以使用动态代理来解决了代理类在程序运行时创建代理的方式叫动态代理,也就是说代理类并不是在java代码中定义的,而是在运行的时候动态生成的JDK从1.3版本就开始支持动态代理类的创建。主要核心类只有2个:java.lang.reflect.Proxyjava.lang.reflect.InvocationHandler还是上面的例子,用JDK动态代理如下:当我们调用代理类对象的方法时,这个“调用”会转送到invoke方法中,代理类对象作为proxy参数传入,参数method标识了我们具体调用的是代理类的哪个方法,args为这个方法的参数。这样一来,我们对代理类中的所有方法的调用都会变为对invoke的调用,这样我们可以在invoke方法中添加统一的处理逻辑(也可以根据method参数对不同的代理类方法做不同的处理)。因此我们可以在中介类的invoke方法中实现输出售前了解,再调用被代理类的方法,再输出售后服务。执行代码可以看到无论多少个接口,只需要一个代理类就可以了。代理类:执行代码:JDK动态代理实现接口,CGLIB动态继承思想JDK动态代理(目标对象存在接口时)执行效率高于CIGLIB如果对象有接口实现,选择JDK代理,如果没有接口实现选择CGILB代理到此,关于“Java动态代理实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: vue的跨域问题怎么解决

这篇“vue的跨域问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue的跨域问题怎么解决”文章吧。在vue中,跨域是指浏览器不能执行…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/22 21:58
下一篇 03/22 21:59

相关推荐