- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Spring AOP框架实现的结构分析
本文的目标:?从实现的角度来认识SpringAOP框架。?观察的角度:?从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringAOP框架。?本文的风格:?首先列出AOP的基本概念;?其次介绍框架所涉及到的核心组件列表,组件之间的结构关系图;?然后细化结构图中的部分;?接下来是一个简单的sample;?最后是后记部分。?注:?1.本文的源代码基于Spring2.x。Spring的源代码也处于演变中,但对基础代码的影响并不大。?2.本文是对Spring IoC容器实现的结构分析的姊妹帖。?正文:?Spring AOP框架涉及的基本概念介绍:?关注点(concern):一个关注点可以是一个特定的问题、概念、或是应用程序的兴趣区间--总而言之,应用程序必须达到的一个目标。?核心关注点(core concern):业务功能模块,如:存款模块,取款模块,转账模块等,?横切关注点(crosscutting concern):非功能性的、横切性模块,如:安全性管理,事务管理,性能监控等。?面(aspect):一个面是对一个横切关注点的模块化,它将那些原本散落在各处的、用于实现这个横切点的代码归整到一处。?连接点(join point):程序执行过程中的一点,如:?字段访问:读、写实例变量;?方法调用:对方法(包括构造方法)的调用;?异常抛出:特定的异常被抛出。?切入点(pointcut):一组连接点的总称,用于指定某个应该在何时被调用。切入点常用正则表达式或别的通配符语法来描述,有些AOP实现技术还支持切入点的组合。?(advice):在特定连接点执行的动作。很多AOP框架都以拦截器(interceptor)的形式来表现--所谓拦截器是这样的一个?对象:当连接点被调用时,它会收到一个回调消息。基本的有:??? 前(BeforeAdvice):在连接点调用之前,首先调用;??? 后(AfterAdvice):在连接点调用之后,再调用,在AspectJ中,又分为三种:?AfterReturningAdvice:在调用成功完成(没有异常抛出)之后。?AfterThrowingAdvice:在抛出某种特定类型(或其子类型)的异常之后。?AfterAdvice:在连接点的任何调用之后,不管调用是否抛出异常。?? 环绕(AroundAdvice):这类可以完全控制执行流程。除了完成本身的工作之外,它还需要负责主动调用连接点,促使真实的操作发生(proceed)-- 这通常是通过调用某个特定的方法来完成的。?引介(introduction):为一个现有的Java类或接口添加方法或字段。这种技术可以用于实现Java中的多继承,或者给现有对象模型附加新的API。?混入继承(mixin inheritance):一个“混入类”封装了一组功能,这组功能可以被混入到现有的类当中,并且无须使用传统的继承手段。在AOP这里,混入是通过引介来实现的。在Java语言中,可以通过混入来模拟多继承。?织入(weaving):将方面整合到完整的执行流程(或完整的类,此时被织入的便是引介中)。?拦截器(initerceptor):很多AOP框架用它来实现字段和方法的拦截(interception)。随之而来的就是在连接点(如方法拦截)处挂接一条拦截器链(interceptor chain),链条上的每个拦截器通常会调用下一个拦截器。?AOP代理(AOP proxy):即被(advise)的对象引用--也就是说,AOP将在其上执行的这样一个对象引用。?目标对象(target object):位于拦截器链末端的对象实例--这个概念只存在于那些使用了拦截机制的框架之中。?注:上述概念描述引自《Expert One-on-One J2EE Development without EJB》中第八章对AOP概念描述部分,更多精彩部分可以参阅本章的完整内容。?上述概念已被Spring AOP框架很好的实现,相关组件:?Advisor 组件,?Advice?? 组件,?Pointcut 组件,?Advised 组件,?AopProxy 组件,?AopProxyFactory 组件,?图1.??图1是对、切入点、、AOP代理之间依赖关系的全景图。?和切入点组成一个面,面信息与目标对象信息被组织到Advised中,AopProxyFactory通过Advised中保存的信息生成AopProxy?对象,调用AopProxy.getProxy()方法即可获得后的对象。?这里要着重了解的是不同的子类型,不同的切入点子类型,?对于不同的切入点子类型最重要的两种子类型:
原创力文档


文档评论(0)