课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > java程序员:代理模式的定义
  • java程序员:代理模式的定义

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-21

  • 昆明Java培训班的老师今天给大家分享代理模式的定义:

    为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

    代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。

    在软件设计中,使用代理模式的意图也很多,比如因为安全原因需要屏蔽客户端直接访问真实对象,或者在远程调用中需要使用代理类处理远程方法调用的技术细节(如RMI),也可能为了提升系统性能,对真实对象进行封装,从而 达到延迟加载的目的。

    代理模式角色分为4种:

    主题接口:定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法;

    真实主题:真正实现业务逻辑的类;

    代理类:用来代理和封装真实主题;

    Main:客户端,使用代理类和主题接口完成一些工作。

    1.什么是动态代理?

    答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象 客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。

    2.为什么使用动态代理?

    答:因为动态代理可以对请求进行任何处理

    3.哪些地方需要动态代理?

    答:不允许直接访问某些类;对访问要做特殊处理等

    JAVA动态代理的作用是什么?

    昆明Java培训班的老师知道主要用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情(甚至根本不去执行这个方法),因为在InvocationHandler的invoke方法中,你可以直接获取正 调用方法对应的Method对象,具体应用的话,比如可以添加调用日志,做事务控制等。

    还有一个有趣的作用是可以用作远程调用,比如现在有Java接口,这个接口的实现部署在其它服务器上,在编写客户端代码的时候,没办法直接调用接口方法,因为接口是不能直接生成对象的,这个时候就可以考虑代理模式(动 代理)了,通过Proxy.newProxyInstance代理一个该接口对应的InvocationHandler对象,然后在InvocationHandler的invoke方法内封装通讯细节就可以了。具体的应用,最经典的当然是Java标准库的RMI,其它比如hessian,各种webservice框架中的远程调 ,大致都是这么实现的。

    动态代理我们分之为jdk动态代理和cglib动态代理

    JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了。CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术 截所有父类方法的调用,顺势织入横切逻辑。JDK动态代理与CGLib动态代理均是实现Spring AOP的基础。

    CGLib创建的动态代理对象性能比JDK创建的动态代理对象的性能高不少,但是CGLib在创建代理对象时所花费的时间却比JDK多得多,所以对于单例的对象,因为无需频繁创建对象,用CGLib合适,反之,使用JDK方式要更为合适一些。同 ,由于CGLib由于是采用动态创建子类的方法,对于final方法,无法进行代理。

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:【昆明Java培训班】什么是AOP?

下一篇:Java培训班:JDK动态代理

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56