面向切面编程zxwlf.docx
上传人:qw****27 上传时间:2024-09-12 格式:DOCX 页数:5 大小:31KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

面向切面编程zxwlf.docx

面向切面编程zxwlf.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

面向切面编程:AspectOrientedProgrammingAOP是OOP的延续,是AspectOrientedProgramming的缩写,意思是面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。切面(Aspect)Aspect是你要实现的交叉功能,它是你应用中正在模块化的一个方面(aspect)。比较通用的一个例子是日志。记录日志是一项贯穿整个应用的服务。由于应用基本以功能(基于业务逻辑)为界限进行划分模块,故通过继承的方法来重用日志模块似乎不合理。但是,你可以创建一个日志aspect来实现你的想法。连接点(Joinpoint)Joinpoint是在应用运行中那些aspect可以插进来的点。这个点可能是一个被调用的方法,一个被抛出的异常,甚至可以是一个被改变的字段。切面代码在这些地方插入到你的应用流程中,就可以为你的应用增加一些新的行为。通知(Advice)通知切面的实际实现。它通知应用系统新的行为。在日志例子中,日志通知包含了实现实际日志功能的代码,如向日志文件写日志。通知在连接点插入到应用系统中。切入点(Pointcut)Pointcut定义了advice应该被插入到什么样的joinpoint点上。Advice可以被应用到任意AOP框架支持的joinpoint上。当然,你不会希望将所有的aspect应用到可以被应用的joinpoint上面。Pointcut让你可以指定advice应用的位置。通常,你用具体的类名或方法名,或者一些符合表达式的类或方法名来指定pointcut。一些AOP框架允许你创建动态的pointcuts,这些pointcuts可以在运行的时候动态决定是否需要应用advice,比如方法的参数值。引入(Introduction)Introduction可以让你添加方法和属性到已经存在的类中。例如,你可以创建一个稽查的advice类用来跟踪某对象最后改变的时期。这个可以简单地通过一个属性记录状态,并添加一个setLastModified(Date)方法来实现。可以在不改变已存在类的情况下将这个引入,给他们新的行为和状态。目标对象(Target)目标对象是被通知对象,它既可以是你编写的类也可以是你要添加定制行为的第三方类,如果没有AOP,这个类就必须要包含它的主要逻辑以及其他交叉业务逻辑。有了AOP,目标对象就可以全身心地关注主要业务,忘记应用其上的通知。代理(Proxy)代理是将通知应用到目标对象后创建的对象,对于客户来说,目标对象(应用AOP之前的对象)和代理对象(应用AOP之后的对象)是一样的。也就是,应用系统的其他部分不用为了支持代理对象而改变。织入(Weaving)织入是将切面应用到目标对象从而创建一个新的代理对象的过程。切面在制定接入点被织入到目标对象中。织入发生在目标对象生命周期的多个点上:编译期-Aspects在目标类编译期被weave。这个需要特殊的编译器载入期-Aspects在目标类载入期被weave。这个需要特殊的类装载器。运行期-Aspects在应用运行时的某个时期被weave。一般来说,AOP容器在weaveinaspects的时候会动态创建proxy类来代理target类关键字:AOP一、AOP概念Joinpoint:它定义在哪里加入你的逻辑功能,对于SpringAOP,Jointpoint指的就是Method。Advice:特定的Jointpoint处运行的代码,对于SpringAOP来讲,有Beforeadvice、AfterreturningAdvice、ThrowAdvice、AroundAdvice(MethodInteceptor)等。Pointcut:一组Joinpoint,就是说一个Advice可能在多个地方织入,Aspect:这个我一直迷惑,它实际是Advice和Pointcut的组合,但是SpringAOP中的Advisor也是这样一个东西,但是Spring中为什么叫Advisor而不叫做Aspect。Weaving:将Aspect加入到程序代码的过程,对于SpringAOP,由ProxyFactory或者ProxyFactoryBean负责织入动作。Target:这个很容易理解,就是需要Aspect功能的对象。Introduction:引入,就是向对象中加入新的属性或方法,一般是一个实例一个引用对象。当然如果不引入属性或者引入的属性做了线程安全性处理或者只读属性,则一个Class一个引用也是可以的(自己理