AOP的基础概念

原创 2011年01月21日 16:06:00

http://www.douban.com/group/topic/8886167/

 

首先我们来了解AOP中的一些基本概念。这些概念都是AOP的通用术语,并非Spring.NET所特有。很遗憾AOP的术语不是特别的直观。但如果让Spring.NET来定义自己的专用名词,可能会更加教人糊涂。

方面(Aspect):对横向分布在多个对象中的关注点所做的模块化。在企业应用中,事务管理就是一个典型的横切关注点。Spring.NET将方面实现为Advisor或拦截器(interceptor)。(按:Advisor是通知和切入点的组合,拦截器实际就是指通知,注意在本文档中,一般会把环绕通知称为拦截器,而将其它类型的通知称为通知,这是因为环绕通知实现的是AopAlliance.Intercept.IMethodInterceptor接口,而其它通知类型实现的都是Spring.Aop命名空间下的通知接口。)

连接点(Joinpoint):程序执行过程中的一个点,例如对某个方法的调用或者某个特定异常的抛出都可以称为连接点。

通知(Advice):AOP框架在某个连接点所采取的行为。通知有多种类型,包括“环绕”通知,“前置”通知和“异常”通知等,后文将对通知类型进行讨论。包括Spring.NET在内的很多AOP框架都把通知建模为拦截器(interceptor),并且会维护一个"包围"在连接点周围的拦截器链。

切入点(Pointcut):指通知的应用条件,用于确定某个通知要被应用到哪些连接点上。AOP框架应允许让开发人员指定切入点,例如,可以使用正则表达式来指定一个切入点。

引入(Introduction):向目标对象添加方法或字段的行为。Spring.NET允许为任何目标对象引入新的接口。例如,可以利用引入让任何对象在运行期实现IAuditable接口,以简化对象状态变化的跟踪过程。(按:也称为mixin,混入)

目标对象(Target object):指包含连接点的对象。也称为被通知或被代理对象。(按:“被通知对象”实际是“被应用了通知的对象”,在译文中,将advised object或proxied object统称为目标对象,这样更为统一)

AOP代理(AOP proxy):由AOP框架在将通知应用于目标对象后创建的对象。在Spring.NET中,AOP代理是使用IL代码在运行时创建的动态代理。

织入(Weaving):将方面进行组装,以创建一个目标对象。织入可以在编译期完成(例如使用Gripper_Loom.NET编译器),也可以在运行时完成。Spring.NET在运行时执行织入。



各种通知类型包括:

环绕通知(Around Advise):包围(按:即在连接点执行的前、后执行)某个连接点(如方法调用)的通知。这是功能最强大的一种通知。环绕通知允许在方法调用的前后执行自定义行为。它可以决定是让连接点继续执行,还是用自己的返回值或异常来将连接点“短路”。

前置通知(Before Advise):在某个连接点执行之前执行,但是不具备阻止连接点继续执行的能力(除非它抛出异常)。

异常通知(Throws Advise):当方法(连接点)抛出异常时执行。Spring.NET的异常通知是强类型的(按:Spring.NET用标识接口来定义异常通知,异常通知的处理方法仅需遵循一定的命名规则,可以用具体的异常类型声明其参数,参见12.3.2.3节),所以,可以在代码中直接捕捉某个类型的异常(及其子类异常),不必从Exception转型。

后置通知(After returning Advise):在连接点正常执行完成后执行,例如,如果方法正常返回,没有抛出异常时,后置通知就会被执行。

Spring.NET内置了以上所有类型的通知。在应用时,应尽量使用功能最少(只要对要实现的行为来说是足够的)的通知类型,这样可简化编程模型并减少出错的可能。例如,如果只需使用某个方法的返回值来更新缓存,那么用后置通知就比环绕通知合适。因为,尽管环绕通知可以完成同样的功能,但在后置通知中不用象环绕通知那样必须调用IMethodInvocation接口的Proceed()方法来允许连接点继续执行,所以连接点总是能正常执行。(按:换句话说,因为环绕通知可以控制连接点的继续执行,所以如果没有调用IMethodInvocation接口的Proceed()方法,连接点就会被“短路”;而使用后置通知就不存在这个问题)。

切入点是AOP的关键概念,使AOP从根本上区别于旧的拦截技术。切入点使通知可以独立于OO的继承层次之外。例如,一个声明式事务处理的环绕通知可以应用于不同对象的方法。切入点是AOP的结构性要素。

Aop概念详解

前面的一篇博客大概的讲了讲AOP的个人理解,也罗列了一些主要概念的定义。后面参加了一次AOP的讨论,发现对于概念的理解居然有这么多的分歧。所以,这篇博客要详细的解释一下我对这些概念的认知。 AOP的目...
  • zhuojiajin
  • zhuojiajin
  • 2015年03月30日 23:53
  • 1256

AOP中的基础概念

1.切面(aspect):要实现的交叉功能,是系统模块化的一个切面或领域。如日志记录。 2.连接点(joinpoint):应用程序执行过程中插入切面的地点,可以是方法调用,异常抛出,或者要修改的字段。...
  • tianma630
  • tianma630
  • 2012年11月18日 22:41
  • 312

AOP的基础概念

首先我们来了解AOP中的一些基本概念。这些概念都是AOP的通用术语,并非Spring.NET所特有。很遗憾AOP的术语不是特别的直观。但如果让Spring.NET来定义自己的专用名词,可能会更加教人糊...
  • allen2010lp
  • allen2010lp
  • 2010年11月02日 17:43
  • 108

mysql数据库基础概念

MYSQL是支持sql(structured Query Language,结构化查询语言)数据库语言的一个关系数据库...
  • happy_cheng
  • happy_cheng
  • 2014年07月27日 22:04
  • 605

spring aop基础概念

spring aop基础概念
  • neillee136
  • neillee136
  • 2016年05月09日 18:51
  • 1511

Spring AOP(一)——基础概念

前文的一些内容更多是针对Spring容器内部的一些特性的描述,接下来一个专题将描述Spring AOP的一些信息,配置细节等等。介绍面向切面编程(AOP)是一种新的针对程序结构的思路,它补足了面向对象...
  • EthanWhite
  • EthanWhite
  • 2016年10月12日 23:39
  • 19490

概率论基础概念总结 Basic Concepts in Statistics

在这里自己总结一些概率论中常用的基本概念,方便以后参考。这里强调对概念的理解,不强调精确的定义和理论。 大数定律 Law of Large Number LLN 中心极限定理 Central Limi...
  • dymodi
  • dymodi
  • 2016年11月08日 05:30
  • 1323

Web标准的基本概念

一,什么是WEB标准?WEB标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面...
  • sugar88
  • sugar88
  • 2005年06月28日 22:20
  • 814

Spring 中基础概念——IoC、AOP

IoC容器 IoC(Inverse of Control):某一接口具体实现类的选择控制权从调用类移除,转交给第三方决定。 DI(Dependency Injection):让调用类对某一接口实现类的...
  • qq_24145735
  • qq_24145735
  • 2016年08月11日 08:35
  • 307

cocos2dx学习之基本概念

转载自 http://blog.csdn.net/bill_man/article/details/7214035 在cocos2d引擎中,有几个概念,分别是导演,场景,布景和人物角色。 导...
  • chan70707
  • chan70707
  • 2016年07月08日 11:11
  • 345
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AOP的基础概念
举报原因:
原因补充:

(最多只允许输入30个字)