关闭

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

标签: aop事务web开发结构
439人阅读 评论(16) 收藏 举报
分类:

一、AOP:

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

二、静态代理:

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

三、动态代理:

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

总述:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:86605次
    • 积分:3769
    • 等级:
    • 排名:第8486名
    • 原创:90篇
    • 转载:4篇
    • 译文:0篇
    • 评论:1222条
    文章分类