AOP
-AOP:Aspect Oriented Programming的缩写,意为:面向切面编程,通过欲编译(AspectJ)方式和运行期动态代理实现程序功能的统一维护的一种技术
-主要的功能:日志记录、性能统计、安全控制、事务处理、异常处理等等。
-AOP的几个重要概念
1)切面(Aspect)
将权限检查、事务管理等与业务逻辑无关的动作或任务提取出来,设计为一个服务对象,这样的对象称之为切面。
将散落于各个业务对象之中的Cross-cutting concern收集起来,设计各个独立可重用的对象,这些对象称之为Aspect。
还
是权限检查的问题,如果使用传统的OOP来实现的话,就要在每个需要该动作的对象中写一段权限检查的代码(其实这样一段代码就算是一个Cross-
cutting
concern,如果每个对象都需要这样一段重复的代码(而且这个动作并不是一个对象自身的行为)会给以后的维护带来不必要的麻烦);而如果使用AOP来
实现的话,就是将权限检查这个动作提取出来,单独设计成一个服务对象(就是Aspect),然后在切入到程序的流程之中,使得对象能够更加专注实现自己的
职责,当日后需要修改权限检查这个动作的时候,只需要修改权限检查器这个服务对象,而不累及应用中其它的业务对象。
2)横切关切点(Cross-cutting concern)
如安全检查、事务、权限等系统层面的服务(service),在一些应用程序中常被见到安插至各个对象的处理流程之中,这些动作在AOP的术语中被称之为Cross-cutting concern。
若
将这些关切点直接编写在负责某业务的对象流程之中,会使得维护程序的成本增高,如将权限检查这个动作在插入到每个Action之中,若将来要把这个动作移
除,则所有应用了这个动作的对象都要被修改,然后重新编译,另一方面,cross-cutting
concerns混杂于业务逻辑之中(即这个动作并非对象的本身行为),会使得业务对象本身的逻辑或程序的编写更为复杂。
3)处理逻辑\通知(Advice)
Aspect的具体实现称之为Advice,以权限检查动作而言,Advice会包括权限检查的程序代码是如何实现的,Advice中包括了Cross-cutting conerns的行为或所要提供的服务.
1:before advice 在方法执行前执行。
2:after returning advice 在方法执行后返回一个结果后执行。
3:after throwing advice 在方法执行过程中抛出异常的时候执行。
5:After(finally)advice)后通知
4:Around advice 在方法执行前后和抛出异常时执行,相当于综合了以上三种通知。
4)连接点(Joinpoint)
Aspect在应用程序执行时加入业务流程的点或时机称之为Joinpoint,具体来说,就是Advice在应用程序中被执行的时机,这个时机可能是某个方法被执行之前或之后或两都有,或是某个异常发生的时候.
5)切入点(Pointcut)
Pointcut是一个定义,藉由这个定义,您可以指定某个Aspect在哪些Joinpoint时被织入至应用程序之上.具体地说,您可以在某个定义文件中编写Pointcut,当中说明了哪些Aspect要应用至织入程序中的Joinpoint.
6)目标对象(Target)
即一个Advice被应用的对象或目标对象.
7)Introduction
对于一个现存的类,Introduction可以为其增加行为,而不用修改该类的程序,具体地说,可以为某个已编写、编译完成的类,在执行时期动态加入一些方法或行为,而不用修改或新增任何一行程序代码。
8)织入(Weave)
Advice被应用至对象之上的过程称之为织入(Weave),在AOP中织入的方式有几个时间点:编译时期(Compile time)、类加载时期(Classload time)、执行时期(Runtime)。
--AOP思想的带来的影响:
1.提高了程序的可移植性,可维护性;
2.将一些与对象本身毫不相干的职责,行为分离出来,使得对象的职责更加明确;
3.提高了组件的可重用性;
4.系统的层次结构更加清晰.