深入了解代理模式

代理分为静态代理和动态代理,下面分别针对两种代理做一下介绍:

一、静态代理(静态织入的方式)

所谓静态代理是指,在程序运行前,由程序员创建或特定工具自动生成源代码并对其编译生成.class文件,通过代理类在不修改原有代码的前提下增加一些新功能,是开闭原则(Open for Extension, Closed for Modification)最典型的实践。

二、动态代理

动态代理则可以简单地为各个主题类分别生成代理类,共享“预处理,后处理”功能,这样可以大大减小程序规模,这也是动态代理的一大亮点。

在动态代理中,代理类是在运行时期生成的。因此,相比静态代理,动态代理可以很方便地对委托类的相关方法进行统一增强处理,如添加方法调用次数、添加日志功能等等。

动态代理主要分为JDK动态代理和cglib动态代理两大类。

      1、实现动态代理的关键技术是反射;

  2、代理对象是对目标对象的增强,以便对消息进行预处理和后处理;

  3、InvocationHandler中的invoke()方法是代理类完整逻辑的集中体现,包括要切入的增强逻辑和进行反射执行的真实业务逻辑;

  4、使用JDK动态代理机制为某一真实业务对象生成代理,只需要指定目标接口、目标接口的类加载器以及具体的InvocationHandler即可。

  5、JDK动态代理的典型应用包括但不仅限于AOP、RPC、Struts2、Spring等重要经典框架。

猜你喜欢

转载自www.cnblogs.com/takemyjavalisfe/p/10537010.html
今日推荐