第一篇blog文章,自己是个菜鸟,希望大家能有指出文章中的错误,大家一起进步。
上图是代理模式的实现,代理模式主要是用于客户端对真实对象访问之前进行一些控制,例如日志输出,权限控制等,如上图,客户程序只能通过SubjectProxy来访问RealSubject,因为代理类和实现类都是实现一个同一个Subject接口,所以在客户程序看来,他只知道访问的是实现Subject接口的一个对象,而不管是哪个类的对象,代理类持有被代理对象的引用,在调用方法时,代理对象可以先做一些操作,然后再调用被代理对象的方法。但是这样做的缺点是,一个Subject就要创建一个代理类,如果Subject很多,那么就需要为每个Subject都创建一个代理类,类的数量就会变得很庞大,更重要的是,如果要修改代理功能,比如原来是没有日志输出的,现在要加上日志输出,哪么你需要在每个代理类中添加日志输出的代码,(不过要是权限控制的话,这样的静态代理是不是能实现更细粒度的权限控制?比如我对这个对象的方法可以让所有人访问,而其他一个对象需要有某某权限才能访问。如果在动态代理下,也可以实现对每个对象的细粒度控制,不过那样动态代理类应该会非常庞大了吧?),
在Java中,还有一种动态代理,他可以解决上面当Subject很多的时候,每个代理都要生成一个代理类的问题,其主要用到了java.lang.reflect包下的Proxy和InvocationHandler.
首先我们让一个Handler类实现InvocationHandler接口,然后用Proxy的Proxy.newProxyInstance(loader, interfaces, h)方法生成一个动态代理对象,其中的三个参数分别为:第一个制类的装载器,第二个是要生成的动态代理类的接口,第三个是实现了InvocationHandler接口的Handler类,当调用生成出来的动态代理对象的方法时,他就自动去调用Handler的invoke(InvocationHandler接口要求必须实现invoke方法)这样就实现了动态代理,即使有很多类,也只要一个代理即可。
还有两个不太明白的地方就是invoke方法里的第一个参数,proxy,应该就是动态代理对象,但是他传到invoke里面做什么呢?因为在invoke里再调用他肯定会形成死循环,估计是不是invoke方法调用的时候要用到proxy这个对象,但是如果我们是用不到这个对象的,sun为什么还写在这里呢?不能把它隐藏起来么?还有就是上面我说的细粒度的权限控制问题,如果几个对象的权限访问机制都不一样,哪么就必须得在invoke中来处理,这样的话,invoke方法将非常庞大,希望各位高手能指点下哈,本人第一次写blog,感觉自己的表达能力真的是很差,写这么一篇文章就花了1个多小时,呵呵,以后只能多加练习了。
- 大小: 123.9 KB
分享到:
相关推荐
NULL 博文链接:https://xueyue.iteye.com/blog/1202897
一个有关JAVA动态代理机制的例子,用eclipse开发的,如果有对Java有兴趣的朋友,不妨先拿去看一看。
Java动态代理机制详解[整理].pdf
Java动态代理机制详解_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
java 动态代理机制综合分析~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
通过详细的一个Proxy实例,详尽的讲解了JAVA动态代理的实现和一些基本知识。
Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。
java动态代理的机制分析,以及相应的拓展。有详细的代码和实例加以分析。
详细介绍了Java的动态代理机制 是学习Java反射与动态代理的不错资料
本文通过分析Java动态代理的机制和特点,解读动态代理类的源代码,并且模拟推演了动态代理类的可能...Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地
java动态代理的分析与实现。有详细的代码实例,适合学习。
java中动态代理的分析与实现。有详细的代码综合实例,适合学习。
java代理机制 JDK动态代理和cglib代理 详解
NULL 博文链接:https://bijian1013.iteye.com/blog/2382393
JAVA的反射机制与动态代理
JAVA 反射机制与动态代理ppt,郎溪出品
主要讲述Java反射机制与设计模式之一:代理模式的原理与应用;同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践。
java反射机制和动态代理的原理,熟悉反射机制和动态代理