- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
代理模式的典型应用 (2) EJB、Web Service等分布式技术都是代理模式的应用。 在EJB中使用了RMI机制,远程服务器中的企业级Bean在本地有一个骨架代理,客户端通过骨架来调用远程对象中定义的方法,而无须直接与远程对象交互。在EJB的使用中需要提供一个公共的接口,客户端针对该接口进行编程,无须知道骨架以及远程EJB的实现细节。 代理模式的典型应用 (3) Spring 框架中的AOP技术也是代理模式的应用,在Spring AOP中应用了动态代理(Dynamic Proxy)技术。 AOP( Aspect oriented Programming):面向切面编程。在不改动代码的前提下,灵活的在现有代码的执行顺序前后,添加进新规机能。 代理模式的扩展 图片代理:一个很常见的代理模式的应用实例就是对大图浏览的控制。 用户通过浏览器访问网页时先不加载真实的大图,而是通过代理对象的方法来进行处理,在代理对象的方法中,先使用一个线程向客户端浏览器加载一个小图片,然后在后台使用另一个线程来调用大图片的加载方法将大图片加载到客户端。当需要浏览大图片时,再将大图片在新网页中显示。如果用户在浏览大图时加载工作还没有完成,可以再启动一个线程来显示相应的提示信息。通过代理技术结合多线程编程将真实图片的加载放到后台来操作,不影响前台图片的浏览。 代理模式的扩展 远程代理:远程代理可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在。客户完全可以认为被代理的远程业务对象是局域的而不是远程的,而远程代理对象承担了大部分的网络通信工作。 代理模式的扩展 动态代理,AOP的实现原理 (1) 在传统的代理模式(静态代理)中,客户端通过Proxy调用RealSubject类的request()方法,同时还在代理类中封装了其他方法(如preRequest()和postRequest()),可以处理一些其他问题。 (2) 如果按照这种方法使用代理模式,那么真实主题角色必须是事先已经存在的,并将其作为代理对象的内部成员属性。如果一个真实主题角色必须对应一个代理主题角色,这将导致系统中的类个数急剧增加,因此需要想办法减少系统中类的个数,此外,如何在事先不知道真实主题角色的情况下使用代理主题角色,这都是动态代理需要解决的问题。 动态代理的实现 Java动态代理实现相关类位于java.lang.reflect包,主要涉及一个接口和一个类: (1) InvocationHandler接口。它是动态代理对象所依赖的调用处理程序所必须实现的接口,该接口中定义了如下方法:public Object invoke (Object proxy, Method method, Object[] args) throws Throwable; 第一个参数proxy表示被代理的类, 第二个参数method表示被代理类中的方法, 第三个参数args表示被代理方法的参数数组。 动态代理的实现 (2)Proxy类,动态代理类,为实现某接口的类创建代理,同时指定调用处理程序对象。 public static Object newProxyInstance(ClassLoader loader, Class?[] interfaces, InvocationHandler h) throws IllegalArgumentException。该方法用于根据传入的接口类型interfaces返回一个动态创建的代理类的实例。 第一个参数loader表示被代理类的类加载器。 第二个参数interfaces表示被代理类实现的接口列表。 第三个参数h表示所指派的调用处理程序对象。 动态代理的类图关系 见源文件:动态代理 Java的反射机制 主要内容 1. Class的基本概念以及创建方式 2.反射的基本概念 3.类的各个组成部分对应的反射类 Constructor Field Method 4.反射在框架中的应用 反射的基础-Class Java当中的类用来表示具有相同属性和方法的对象的结合,是抽象的概念。对象是类创建的,同一个类的不同对象具有不同的属性值。 Java当中定义的所有类都属于同一类事物,可以用Class来表示。 对比理解: 不同的人可以用Person类来表示。
文档评论(0)