欢迎来到天天文库
浏览记录
ID:30787379
大小:679.16 KB
页数:8页
时间:2019-01-03
《springaop框架实现的结构分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、本文的目标:从实现的角度来认识SpringAOP框架。观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringAOP框架。本文的风格:首先列出AOP的基本概念;其次介绍框架所涉及到的核心组件列表,组件之间的结构关系图;然后细化结构图中的部分;接下来是一个简单的sample;最后是后记部分。注:1.本文的源代码基于Spring2.XoSpring的源代码也处于演变中,但对基础代码的影响并不大。2本文是对SprinqloC容器实现的结构分析的姊妹帖。正文:SpringAOP框架
2、涉及的基本概念介绍:关注点(concern):一个关注点可以是一个特定的问题、概念、或是应用程序的兴趣区间■■总而言之,应用程序必须达到的一个目标。核心关注点(coreconcern):业务功能模块,如:存款模块,取款模块,转账模块等,横切关注点(crosscuttingconcern):非功能性的、横切性模块,如:安全性管理,事务管理,性能监控等。切面(aspect):一个切面是对一个横切关注点的模块化,它将那些原本散落在各处的、用于实现这个横切点的代码归整到一处。连接点(joinpoint)
3、:程序执行过程中的一点,如:字段访问:读、写实例变量;方法调用:対方法(包括构造方法)的调用;异常抛出:特定的异常被抛出。切入点(pointcut):-组连接点的总称,用于指定某个通知应该在何时被调用。切入点常用正则表达式或别的通配符语法来描述,有些AOP实现技术还支持切入点的组合。通知(advice):在特定连接点执行的动作。很多AOP框架都以拦截器(interceptor)的形式来表现通知-所谓拦截器是这样的-个对象:当连接点被调用时,它会收到一个回调消息。基本的通知有:前置通知(Befor
4、eAdvice):在连接点调用之前,首先调用通知;后置通知(AfterAdvice):在连接点调用之后,再调用通知,在AspectJ中,后置通知乂分为三种:AfterReturningAdvice:在调用成功完成(没有异常抛出)之后。AfterThrowingAdvice:在抛出某种特定类型(或其子类型)的异常之后。AfterAdvice:在连接点的任何调用之后,不管调用是否抛出异常。坏绕通知(AroundAdvice):这类通知可以完全控制执行流程。除了完成本身的工作之外,它还需要负责主动调用
5、连接点,促使真实的操作发生(proceed)-这通常是通过调用某个特定的方法来完成的。引介(introduction):为一个现有的Java类或接口添加方法或字段。这种技术可以用于实现Java中的多继承,或者给现有对象模型附加新的APL混入继^(mixininheritance):一个“混入类”封装了一组功能,这组功能可以被”混入“到现有的类当中,并且无须使用传统的继承手段。在AOP这里,混入是通过引介来实现的。在Java语言中,可以通过混入来模拟多继承。织入(weaving):将方而整合到完整
6、的执行流程(或完整的类,此时被织入的便是引介中)。拦截器(initerceptor):很多AOP框架用它来实现字段和方法的拦截(interception)。随之而来的就是在连接点(如方法拦截)处挂接一条拦截器链(interceptorchain),链条上的每个拦截器通常会调用下一个拦截器。AOP代理(AOPproxy):即被通知(advise)的对象引用-也就是说,AOP通知将在其上执行的这样一个对象引用。目标対象(targetobject):位于拦截器链末端的对象实例“这个概念只存在于那些使用
7、了拦截机制的框架之屮。注:上述概念描述引自《ExpertOne-on-OneJ2EEDevelopmentwithoutEJB》中第八章对AOP概念描述部分,更多精彩部分可以参阅本章的完整内容。上述概念已被SpringAOP框架很好的实现,相关组件:Advisor组件,Advice组件,Pointcut组件,Advised组件,AopProxy组件,AopProxyFactory组件,图1是对通知、切入点、切面、AOP代理之间依赖关系的全景图。通知和切入点组成一个切面,切面信息与目标对象信息被组
8、织到Advised屮,AopProxyFactory通过Advised中保存的信息生成AopProxy对象,调用AopProxy.getProxy()方法即可获得通知后的对象。这里要着重了解的是不同的通知子类型,不同的切入点子类型,对于不同的切入点子类型最重要的两种子类型:静态切入点,动态切入点,静态切入点:根据部署阶段的信息选择増强,女『拦截特定类的所冇getter方法”;动态切入点:根据运行时的信息选择增强,如“如果某方法的返回值为null,则将其纳入某切入点”。0<
此文档下载收益归作者所有