码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式----动态代理模式

时间:2016-04-03 07:50:21      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:设计模式----动态代理模式

    在读这篇文章之前请先阅读之前一篇http://10572970.blog.51cto.com/10562970/1759600,本篇的例子取自前篇。

    首先实现动态代理需要JDK提供的一个接口(InvocationHandler)和一个类(Proxy)来支持。首先说一下     InvocationHandler这个接口,里面有一个public Object invoke(Object proxy, Method method, Object[] args)throws Throwable方法,作用代理类执行的方法的。也就是说代理类每次调用一个方法都会触发代理类所关联的InvocationHandler的invoke方法。其中invoke的参数说明:

   Object proxy是指被代理的对象

   Method method 代理调用的方法

   Object[] args 表示方法参数

下面到了proxy类了,它提供了一些静态的方法来创建代理类。好了,看代码:

MyHandler<<span style="color:#20999d;">T> [object Object]InvocationHandler {
;
MyHandler(iEms) {
.= iEms;
 [object Object] }
Object invoke(Object proxy, Method method, Object[] args) [object Object]Throwable {
.getClass().getClassLoader();
 [object Object]    [object Object]System..println();
 [object Object]    [object Object]Object result = method.invoke(.,args);
 [object Object]    [object Object]System..println();
result;
}
}
创建了一个Handler,使用了泛型,大概大伙都知道了,适应更多的类。
然后到了Proxy类了,为了更通用一些,我用一个类继承了Proxy
CommonProxy{

    <> getProxy(t)
    {

        Class<?>[] clazz = t.getClass().getInterfaces();
        ClassLoader classLoader = t.getClass().getClassLoader();
        MyHandler handler = MyHandler(t);

        t = () Proxy.(classLoader,clazz,handler);

        t;
    }

}
 getProxy就是为某个类创建一个代理类。采用泛型的作用就不用解释了。下面看看用法。
 IEms jdEms = new JDEms();
 IEms jdproxy = CommonProxy.getProxy(jdEms);
 
 jdproxy.deliver();
 jdproxy.call();
 jdproxy.getFood();

  当然读者也可以自己创建一个接口和一个实现了该接口的类。然后被该类创建代理类。最后我们看看InvocationHandler的invoke的方法我们做了什么处理:

     [object Object]System..println();
 [object Object]    [object Object]Object result = method.invoke(.,args);
 [object Object]    [object Object]System..println();

    相信使用过Spring的都不会陌生,对,就是前置通知和后置通知。这就是spring aop的基础。关于动态代理的Proxy类使用不大熟悉的,可以参考这篇博客:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html

本文出自 “10562970” 博客,请务必保留此出处http://10572970.blog.51cto.com/10562970/1759602

设计模式----动态代理模式

标签:设计模式----动态代理模式

原文地址:http://10572970.blog.51cto.com/10562970/1759602

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!