使用JDK中的Proxy技术来实现动态代理
来源:互联网 发布:扁平化管理 知乎 编辑:程序博客网 时间:2024/05/25 16:39
我举个例子来说明一下代理的原理:
现实生活的例子:我大学放假了,我想要去放松一下去海洋馆买个门票,我看见海洋馆门前坐个人,看起来就是卖票的,于是,我上他那去买票,于是,他出去一下说给我拿票来,在他去拿票的过程中又去找了另外一个人,那个人把票给他了,他把票给我了,可是在这个过程中我却什么都不知道,我知道我要拿票,他把票给我就ok了。
java中的例子:客户端用一个接口引用一个对象,然后用这个=接口去调用一些方法,表面上我只看到了这个接口的引用,而程序在运行的时候找的却是具体的对象,这就是多态,所以我完全可以将这个对象掉包,从而在里面做一些手脚,例如日志记录,性能统计,安全控制,事务处理,异常处理等。下面,这个例子就用代理技术对ArrayList这个类做了点手脚。
public class ArrayListProxy {private Object target;public Object getTarget() {return target;}public Object createProxy(Object target) {this.target = target;return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler(){@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("小样,我是病毒,今天我就要阻止你了,爱咋咋地");Object result = method.invoke(getTarget(), args);return result;}});}}
下面是测试类:
public class ProxyTest {@Testpublic void testProxy() {Collection con = (Collection) new ArrayListProxy().createProxy(new ArrayList());addElement(con);}public void addElement(Collection con) {boolean flag = con.add("我要在这个集合里面添加元素,谁也拦不住,哈哈哈!!!");System.out.println(flag);}}
我们本来是想在集合里面添加元素,而在添加之前可以加入一些我们想要的代码,从而达到我们的目的。Spring中的Aop技术基本的原理也是这样实现的,这种方式委托类必须要有接口才可以,如果没有接口的话是行不通的,但是我们可以用cglib,他会继承这个委托类,基本原理也没有多大区别。
0 0
- 使用JDK中的Proxy技术来实现动态代理
- 使用JDK中的Proxy技术实现AOP功能[动态代理]
- 使用JDK中的InvocationHandler、Proxy实现动态代理
- JDK中的proxy动态代理
- JDK中的proxy动态代理
- (9) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- (8) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- JDK使用InvocationHandler和Proxy实现动态代理
- JDK中的proxy动态代理原理剖析
- 使用Proxy反射类实现AOP动态代理技术
- 使用Proxy反射类实现AOP动态代理技术
- 使用 jdk Proxy 生成动态代理
- AOP_1.入门及使用JDK中的Proxy技术实现
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 滚动条触发的内容动态加载效果
- matlat 调整坐标原点到左上角
- Clone Graph解题报告
- 自己动手实现简单的线程池
- AMM启动下,pga_aggregate_target和workarea_size_policy各自无论如何修改,都不会影响对方的值
- 使用JDK中的Proxy技术来实现动态代理
- 如何使用ccache加快编译
- 基于boost和otlv4连接oracle进行简单查询笔记
- ActiveReport入门教程(六) - 交互式离线报表
- 指针的基本操作(1)
- 使用JQuery使浏览器内的控件自适应浏览器大小
- Flex WindowShade控件收放功能
- ipvsadm配置
- Wince蓝牙虚拟串口通信(server & client)