全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
代理模式代理模式即ProxyPattern,什么是代理模式呢?即对其他对象提供一种代理以控制对这个对象的访问。例如,我们有一个类不想被其他类直接调用,我们怎么办呢?我们只能通过代理的形式,让其他的类来调用代理类,代理类必须和目标类是用的同一个方法,且代理类的方法可以在目标类的基础上进行功能扩展,形式如下:目标类:class Personvoid saysyso(hello);代理类:class PersonProxyvoid say start timePerson.say();end time代理的架构图如下:面向方面编程AOP什么是AOP(Aspect oriented program)呢?系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面。交叉业务即安全,事务,日志等功能贯穿到好多个模块中。即它的重要原则是,不要把供货商暴露给你的客户。AOP的目标就是要使交叉业务模块化。AOP即代理类在目标类的方法的周围放上一些安全,事物,日志,我们能实现和目标类一样的功能。动态代理技术什么是动态代理呢?即JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理类注意:JVM生成的动态类必须实现一个或多个接口,所以Jvm生成的动态类只能用作具有相同接口的目标类的代理代理类的各个方法通常除了要调用目标的相应的方法对外返回目标的结果外,还可以在代理方法中的四个位置加上系统的功能代码:a) 在调用目标方法之前、b) 在调用目标方法之后c) 在调用目标方法的前后都有d) 在处理目标方法异常的catch块中总结:即:当我们代理类想去代理一个目标类的时候,我们通过什么方式来知道目标类的方法呢?我们只能让要被代理的目标类继承一个或多个接口,这些接口的方法,目标类并继承了这些方法。代理类也必须继承目标类所继承的接口,即也必须实现了接口的的方法,而且我们在实现接口方法的同时可以在周围加上安全,事物,日志等扩展功能。当我目标类没有继承接口,我们只能通过CGLIB库动态的生成一个类的子类,一个类的子类也可以作为一个代理类。我们通常在写代理常用的方法.代理类为Proxy。a) static Class getProxyClass(ClassLoader loader, Class. interfaces):返回代理类的 java.lang.Class 对象,并向其提供类加载器和接口数组。b) static Object newProxyInstance(ClassLoader loader, Class interfaces, InvocationHandler h):返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。我们根据方法,总共有两种方式:第一种:public class ProxyTest2 public static void main(String args) throws ExceptionClass clazzProxy=Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);Constructor consclazz=clazzProxy.getConstructor(InvocationHandler.class);class MyInvocationHandler implements InvocationHandlerArrayList target=new ArrayList();Overridepublic Object invoke(Object proxy, Method method, Object args)throws Throwable Object retVal=method.invoke(target, args);return retVal;Collection coll=(Collection)consclazz.newInstance(new MyInvocationHandler();coll.add(haha);coll.add(heihei);System.out.println(coll.size();第二种:public class ProxyTest3 public static void main(String args) Collection coll=(Collection) Proxy.newProxyInstance(Collection.class.getClassLoader(),new ClassCollection.class,new InvocationHandler() ArrayList target=new ArrayList();public Object invoke(Object proxy, Method method, Object args)throws Throwable long begin=System.currentTimeMillis();Object retVal=method.invoke(target, args);Thread.sleep(100);long end=System.currentTimeMillis();System.out.println(method+running of time:+(end-begin);return retVal;);coll.add(haha);coll.add(heihei);System.out.println(coll.size();我们看到以上两个代码都是已经指定好了目标类ArrayList,我们在实际开发中就不能这样了,因为那样没有灵活性。,我们可以写个方法是getProxy()来绑定接受目标同时返回代理对象,让调用者更方便,甚至不用接触任何代理的API。那么我们怎么做呢?我们把系统功能代码模块化,即将切面代码改为通过参数形式提供我们将上面第二种方式改为具有灵活性的代码首先我们先定义一个接口,并让一个类去实现这个接口。/需要实现的接口public interface Advice public void startMethod(Method method);public void endMethod(Method method);/我们让一个类去实现这接口public class MyAdvice implements Advice private long begin=0;private long end=0;Overridepublic void startMethod(Method method) begin=System.currentTimeMillis();Overridepublic void endMethod(Method method) end=System.currentTimeMillis();System.out.println(method+running of time:+(end-begin);public class ProxyTest3 public static void main(String args) final ArrayList target=new ArrayList();Collection coll = (Collection) getProxy(target,new MyAdvice();coll.add(haha);coll.add(heihei);System.out.println(coll.size();/传入两个参数,一个是目标类,一个是日志,即adviceprivate static Object getProxy(final Object target,final Advice advice) Object coll=Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),new InvocationHandler() public Object invoke(Object proxy, Met
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司矿井测风工工艺作业技术规程
- 橡胶栽培工创新应用模拟考核试卷含答案
- 2025-2026学年冀教版(新教材)二年级上册第三单元“乘法口诀”达标试卷(附参考答案)
- 四年级课程探究
- 河北省石家庄市栾城区2025-2026学年八年级(上)月考物理试卷(含答案)
- 特训06 二次函数-将军饮马与胡不归专练-2025-2026学年九年级数学上学期期中期末挑战满分冲刺卷(人教版)(解析版)
- 2025山西晋城市市政公用集团有限责任公司招聘工作人员87人笔试历年参考题库附带答案详解
- 2025中国铁塔秋季校园招聘笔试历年参考题库附带答案详解
- 2025浙江台州温岭市华阳再生资源有限公司招聘工作人员1人笔试历年参考题库附带答案详解
- 2025四川虹信软件股份有限公司招聘投标专员岗位拟录用人员笔试历年参考题库附带答案详解
- 老旧小区消防设施更新施工方案
- 企业消防安全课件下载
- 测绘毕业答辩设计
- 2025国际胰腺病学会急性胰腺炎修订指南解读课件
- 2025-2026学年高一化学上学期第一次月考卷(四川)含答案解析
- 2025年江苏省公考《申论》(B卷)题及参考答案
- 危化品运输风险评估与智能管控模型研究
- 脱硫塔安装施工进度方案
- 2025药材行业市场全面分析及发展路径与投资规划策略报告
- 2025年陕西有色金属科工贸服务有限公司招聘(24人)笔试考试参考题库及答案解析
- 肿瘤终末期患者水肿症状管理方案
评论
0/150
提交评论