从静态代理到动态代理理解AOP

原创 2016年05月30日 23:44:26

一、AOP:

       AOP是一种面向切面的编程思想,它算是一种对我们以往自上而下调用关系的补充或辅助。其实其功能主要为抽取服务,在程序的设计过程中会有类似事务一样的服务,从事务的开启、提交、回滚等一系列的操作,和实际需要的业务逻辑耦合性不是很大的情况下,就可以将其抽取出来,这样做的好处:首先是减少了代码量,从开始的遍布在各个地方的这一套服务,单独抽取出来,让所有需要该服务的地方都用我们抽取出来的这一套服务就可以了;对比Filter过滤器来看就更容易理解了,就是在程序运行过程中将需要提供服务的类或方法拦截下来,然后为其提供这一套服务,之后再通过调用类似doFilter的方法再将拦截下来的方法传递下去。通过以上的分析就可以理解这样操作不仅仅减少了代码量,更重要的是将这种重复性的服务抽取出来后,更加了方便我们对程序流程的控制和后期的维护。

二、静态代理:

       静态代理是最初的一种抽取,其抽取过程是创建一个类,这个类与目标对象实现同一个接口,让这个类面向客户端而不是目标类,当客户端需要操作目标对象时需要先经过这个类,在这个类里就可以实现对统一服务和目标对象方法的控制。但是这种方法存在很多缺陷,首先是随着目标的增多,代理也会增多,而且控制上也没有产生很好的效果,这是在服务改变时不用再改原目标,只需要改变代理类即可,所以控制上还是不太好,这样就可以提出用动态代理去实现该功能。

三、动态代理:

       动态代理在结构设计上与静态代理不用的地方为:动态代理不用我们自己去创建代理,而是通过JAVA虚拟机帮助我们在运行时创建,这样就省去了我们创建代理类的麻烦。利用动态代理需要创建一个操作类,这个类实现了InvocationHandler接口,实现该接口的类就拥有的创建代理和提供相应服务的能力。操作类可以通过createProxyInstance方法创建代理,需要将目标对象作为参数传给该方法,在此需要说明的是,目标对象必须实现了相应接口,因为动态代理的底层实现原理还是获取目标实现的接口,创建实现了该接口的代理类,如果不实现接口,将无法创建代理类。而对于需要提供的服务在invoke方法中进行调用,因为在每次调用目标对象的方法时,都会首先调用操作类的invoke方法,这样就可以将统一服务提取到该方法中作为总控,这样对于服务的切入和撤销相对来说就更容易控制了。

总述:

       对于AOP的应用,主要在于能够从程序中发现这种类似的服务。如有不足之处,望多多指教!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【AOP系列】(一)—静态代理VS动态代理(Java)

基础 代理模式:      是什么 【静态代理】:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 【动态代理】:在程序...

AOP之静态代理VS动态代理

一、代理概念         为某个对象提供一个代理,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,代理类负责请求的预处理,过滤,将请求分配给委托类处理。 二、静态代理:        ...

java 动态代理实现AOP

  • 2012年05月17日 14:30
  • 139KB
  • 下载

理解Spring AOP 原理(二)JDK,CGLIB动态代理以及ProxyFactory

Spring AOP的底层是基于JDK和CGLIB代理技术来实现的,要理解Spring AOP,需要先对JDK和CGLIB有一定的认识和理解。一. JDK动态代理先看一段Demo示例,首先定义一个接口...

java动态代理与AOP实例

  • 2013年05月26日 17:06
  • 3KB
  • 下载

AOP与动态代理理解

1代理模式代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对...
  • karaage
  • karaage
  • 2017年06月09日 16:19
  • 164

AOP动态代理(反射机制)

  • 2011年06月30日 11:19
  • 213KB
  • 下载

Spring-AOP-JDK动态代理

  • 2015年05月12日 13:45
  • 75KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从静态代理到动态代理理解AOP
举报原因:
原因补充:

(最多只允许输入30个字)