Java的三种代理模式简述

Java的三种代理模式简述

本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇文章中讲述。

代理模式是什么

代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展。

比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing()。

假如你希望,通过你的某种方式生产出来的歌手对象,在唱歌前后还要想观众问好和答谢,也即对目标对象Singer的sing方法进行功能扩展。

但是往往你又不能直接对源代码进行修改,可能是你希望原来的对象还保持原来的样子,又或许你提供的只是一个可插拔的插件,甚至你有可能都不知道你要对哪个目标对象进行扩展。这时就需要用到java的代理模式了。网上好多用生活中的经理人的例子来解释“代理”,看似通俗易懂,但我觉得不适合程序员去理解。程序员应该从代码的本质入手。

如果你想学习java可以来这个群,首先是220,中间是142,最后是906,里面可以学习和交流,也有资料可以下载。

Java的三种代理模式

想要实现以上的需求有三种方式,这一部分我们只看三种模式的代码怎么写,先不涉及实现原理的部分。

  1. 静态代理

测试

总结:其实这里做的事情无非就是,创建一个代理类SingerProxy,继承了ISinger接口并实现了其中的方法。只不过这种实现特意包含了目标对象的方法,正是这种特征使得看起来像是“扩展”了目标对象的方法。假使代理对象中只是简单地对sing方法做了另一种实现而没有包含目标对象的方法,也就不能算作代理模式了。所以这里的包含是关键。

缺点:这种实现方式很直观也很简单,但其缺点是代理对象必须提前写出,如果接口层发生了变化,代理对象的代码也要进行维护。如果能在运行时动态地写出代理对象,不但减少了一大批代理类的代码,也少了不断维护的烦恼,不过运行时的效率必定受到影响。这种方式就是接下来的动态代理。

2.动态代理(也叫JDK代理)

跟静态代理的前提一样,依然是对Singer对象进行扩展

这回直接上测试,由于java底层封装了实现细节(之后会详细讲),所以代码非常简单,格式也基本上固定。

调用Proxy类的静态方法newProxyInstance即可,该方法会返回代理类对象

接收的三个参数依次为:

ClassLoader loader:指定当前目标对象使用类加载器,写法固定

Class<?>[] interfaces:目标对象实现的接口的类型,写法固定

InvocationHandler h:事件处理接口,需传入一个实现类,一般直接使用匿名内部类

测试代码

总结:以上代码只有标黄的部分是需要自己写出,其余部分全都是固定代码。由于java封装了newProxyInstance这个方法的实现细节,所以使用起来才能这么方便,具体的底层原理将会在下一小节说明。

缺点:可以看出静态代理和JDK代理有一个共同的缺点,就是目标对象必须实现一个或多个接口,加入没有,则可以使用Cglib代理。

3.Cglib代理

前提条件:

需要引入cglib的jar文件,由于Spring的核心包中已经包括了Cglib功能,所以也可以直接引入spring-core-3.2.5.jar

目标类不能为final

目标对象的方法如果为final/static,那么就不会被拦截,即不会执行目标对象额外的业务方法

这里的代码也非常固定,只有标黄部分是需要自己写出

测试

总结:三种代理模式各有优缺点和相应的适用范围,主要看目标对象是否实现了接口。以Spring框架所选择的代理模式举例

在Spring的AOP编程中:

如果加入容器的目标对象有实现接口,用JDK代理

如果目标对象没有实现接口,用Cglib代理

下一篇文章将详细讲述动态代理和Cglib代理的底层原理,敬请期待。

时间: 2024-11-02 23:47:13

Java的三种代理模式简述的相关文章

ISA&amp;amp;TMG三种客户端模式简介(四) Web代理 客户端

在前面几次,我们主要聊到了TMG/ISA中的三种客户端中的"防火墙客户端"."Secure NAT客户端模式"今天呢,我们就来聊聊第三种客户端模式"Web 代理客户端".那么接下来我们来看看"web 代理客户端"向服务器端口发送请求的客户端应用程序或计算机的端口有哪些呢? 1.ISA 服务器计算机上的端口 80. 2. ISA 服务器侦听来自客户端计算机所在网络的传出 Web 请求时所用的端口.默认情况下,ISA 服务器在端口

深入理解java三种工厂模式_java

适用场合: 7.3 工厂模式的适用场合 创建新对象最简单的办法是使用new关键字和具体类.只有在某些场合下,创建和维护对象工厂所带来的额外复杂性才是物有所值.本节概括了这些场合. 7.3.1 动态实现 如果需要像前面自行车的例子一样,创建一些用不同方式实现同一接口的对象,那么可以使用一个工厂方法或简单工厂对象来简化选择实现的过程.这种选择可以是明确进行的也可以是隐含的.前者如自行车那个例子,顾客可以选择需要的自行车型号:而下一节所讲的XHR工厂那个例子则属于后者,该例中所返回的连接对象的类型取决

IOS开发之自定义Button(集成三种回调模式)

前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调,Block回调.具体的内容请参考之前的博客:"Objective-C中的Block回调模式","Target-Action回调模式","Objective-C中的委托(代理)模式".在接下来要封装的button中将要用到上面的知识点.之前在做新浪微

ISA&amp;amp;TMG三种客户端模式简介(三) SecureNAT 客户端

Secure NAT客户端可以说是TMG/ISA三种客户端中最简单的一种客户端,因为这种客户端并不需要特殊软件的支持,也不需要配置一些代理,但是确是依赖于组织的路由结构来将请求转到给ISA/TMG服务器的.所以必须要给客户端计算机配置默认网关,以便于ISA服务器可以通过路由器来进行直接或间接方式地向Internet发送所有通讯信息. 总结来说,Secure NAT客户端在配置前还需要确定一下您当前的网络环境,下边整理了两个: 1.简单网络.在简单网络方案中,SecureNAT 客户端和 ISA

ISA&amp;amp;TMG三种客户端模式简介(一)

最近 一直在忙于研究微软TMG产品遇到CDN技术后站点页面中应用CDN技术的内容就会发现显示不太稳定,同微软的一些同仁聊了很多解决方法,但是一直没有找一到一个合适的解决方法,没办法,只能研究一下看看从微软的三种客户端模式中是否有能解决现在面临的问题. 也顺便回顾了一下微软的三种客户端模式及ISA和TMG,也想借此次对三种客户端模式的一个回顾做一个整理,同时也分享给更多需要的博友. 谈到防火墙产品很多人会想到思科.华为.H3C.juniper等一些网络产商所提供的硬件防火墙产品,但其实在微软也提供

Oracle Data Guard的三种保护模式

Data Guard提供如下三种数据保护模式: 1)最高保护模式(Maximum Protection) 这里的"最大保护"是指最大限度的保护数据不丢失,也就是至少有一个standby和primary保持实时同步,但这样做的代价很大,即当一个事务提交时,不但要写到primary段的online redo log,还有写到至少一个standby的standby redo log.这样会有一个严重的问题,就是当standby出现故障或网络故障,导致日志无法同步时,primary数据库会被s

Oracle Data Guard学习(1) 三种保护模式

Data Guard提供如下三种数据保护模式: 1)最高保护模式(Maximum Protection) 这里的"最高保护"是指最大限度的保护数据不丢失,也就是至少有一个standby和 primary保持实时同步,但这样做的代价很大,因为只要当一个事务提交时,不但要写到primary段的 online redo log,还有写到至少一个standby的standby redo log.这样会有一个严重的问题,就是当 standby出现故障或网络故障,导致日志无法同步时,primary

Oracle] Data Guard 之 三种保护模式介绍

Data Guard提供如下三种数据保护模式,以下是对这三种保护模式进行了详细的分析介绍,需要的朋友可以参考下   Data Guard提供如下三种数据保护模式: 1)最高保护模式(Maximum Protection)这里的"最大保护"是指最大限度的保护数据 不丢失,也就是至少有一个standby和primary保持实时同步,但这样做的代价很大,即当一个事务提交时,不但要写到primary段的 online redo log,还有写到至少一个standby的standby redo

淘宝浏览器的三种浏览模式是什么

  淘宝浏览器提供了三种浏览模式,那么淘宝浏览器的三种浏览器模式分别都是什么呢?有普通模式.安全购物模式和隐私模式,下面就和小编一起来看看吧. 淘宝浏览器三种浏览模式: 1.普通模式:与正常浏览器上网无异,可以支持绝大部分的网络功能和网站. 2.安全购物模式:只能访问网购相关网站,比如淘宝.天猫商城(实测:淘宝的竞争对手的购物网站也可以打开). 3.隐私模式:该模式不会记录任何的浏览痕迹(下载的文件和收藏夹书签除外).         注:更多精彩教程请关注三联电脑教程栏目,三联电脑办公群:18