Java动态代理
来源:互联网 发布:ubuntu luvit 编辑:程序博客网 时间:2024/06/05 15:21
Java动态代理
最近发现很多项目都用到了动态代理,就又认真学习了下Java动态代理。代理模式应用在很多地方,但是如果在编码的时候就添加代理类,那整个代码就会变的非常冗余,繁琐。这样动态代理就应运而生了,动态代理的代理是在程序运行的时候动态生成的。动态代理只需要提供一组接口,以及被代理的对象,程序就会自动生成代理类,而且你还可以在运行方法的前后做一些自己需要的操作,甚至于不执行方法。
下面介绍一个动态代理的例子。
首先是一个被代理的类,以及类实现的接口
public interface ProxyInterface{ void doProxy();}public class ProxyObject implements ProxyInterface{ public void doProxy(){ System.out.println("hello proxy object"); }}
然后有一个对代理运行的时候调用处理的Handle类
public class TestProxyHandler implements InvotationHandler{ Object proxyObject = null; public TestProxyHandler(Object proxyObject){ this.proxyObject = proxyObject; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{ Object result = method.invoke(proxyObject,args);}
使用这些代理的代码
ProxyObject object = new ProxyObject();TestProxyHandler proxyHandler = new TestProxyHandler(object);ProxyInterface proxyInterface = (ProxyInterface)Proxy.newProxyInstance(ProxyObject.class.getClassLoader(), object.getClass().getInterfaces(), proxyHandler);proxyInterface.doProxy();
通过Proxy的newProxyInstance方法产生了一个新的代理对象,这个代理对象实现了指定的接口(方法newProxyInstance第二个参数传入的内容)。程序在运行的时候会执行proxyHandler的invoke方法,我们可以在invoke方法里面做自己需要做的一些操作。
上面就是动态代理的一个非常简单的例子。一个最明显的特征就是代理对象不是单独作为一个类,而是有java代理代码自动生成,其中生成的代理对象内部又引用了InvotationHandler,由InvotationHandler连接与被代理对象。
优势
- Proxy的代码量是固定的了,不会变成一堆庞大的代码
- 可以实现AOP编程
看着动态代理似乎简单,但是应用起来非常广泛,而且有很多意想不到的巧妙。
0 0
- Java 代理,动态代理
- [Java] Java 动态代理
- java代理及动态代理
- java代理模式--动态代理
- Java静态代理、动态代理
- Java 代理之 动态代理
- Java 代理与动态代理
- java静态代理,动态代理
- 代理模式&java动态代理
- Java代理与动态代理
- Java静态代理动态代理
- JAVA代理模式--动态代理
- java 代理和动态代理
- JAVA动态代理 代理模式
- Java动态代理--jdk代理
- Java动态代理--cglib代理
- Java 代理与动态代理
- java代理模式-动态代理
- Java核心技术第12章(3)
- Matlab回显语句
- rpm包安装gcc报错
- Step7中有关时间和定时器的使用和例程2
- linux的ulimit限制详解
- Java动态代理
- sqlserver2008完全卸载 转载自百度经验
- c++ new和delete产生的debug error
- Android 项目中执行java的main方法
- MATLAB的输入与输出语句
- ZOJ 3233 Lucky Number(容斥原理)
- Task not serializable:java.io.NotSerializableExceptionon
- Android 编程下 Touch 事件的分发和消费机制
- 文章标题