Aop 中的相关概念

来源:互联网 发布:java线程优先级大小 编辑:程序博客网 时间:2024/04/30 22:32

 

 

Aop 中的相关概念介绍:

切面(Aspect:一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个横切关注点的很好例子。在Spring AOP中,切面可以使用通用类(基于模式的风格)或者在普通类中以@Aspect注解(@Aspect风格来实现)

连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是代表一个 方法的执行。通过声明一个org.aepectj.lang.JoinPoint类型的参数可以是通知(Advice)的主体部分获得连接点的信息。

通知(Advice):在切面的某个特定的连接点(Jointpoint上执行的动作)。通知有各种类型,其中包括”around”,”before””after”等通知。

切入点(Pointcut :匹配连接点(Jointpoint)的断言,通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行,切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

引入(Introduction)(也被称为内部类型声明inter-type declaration)。声明额外的方法或者某个类型的字段。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来是bean实现IsModified接口,以便简化缓存机制。

目标对象(Target Object):被一个或多个切面(aspect)所通知(advise)的对象。也有人把它叫做被通知(advised)对象。既然SpringAOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。

AOP代理(AOP Proxy):Aop框架创建的对象,用来实现切面契约(aspect  contract)(包括通知方法执行等功能)。在SpringAop代理可以是JDK动态代理或者CGLIB代理。注意:Spring2.0最新引入的基于模式(schema-based)风格和@Aspect注解风格的切面声明,对于使用这些风格的用户来说,代理的创建时透明的。

织入(Weaving):把切面(aspect)连接到其他的应用程序类型或者对象上,并创建一个被通知(advised)的对象。这些可以在编译时(例如使用Aspect编译器),类加载时和运行时完成。Spring和其他纯Java AOP

框架一样,在运行时完成织入。

通知的类型:

   前置通知(Before advice):在某连接点(joinpoint)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。

   返回后通知(After returning advice):在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。

   抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知。

   后通知(After finallyadvice):当某个连接点退出的时候执行的通知(无论是正常返回还是异常退出)

   环绕通知(Around Advice):包围一个连接点(joinpoint)的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。

环绕通知是最常用的一种通知类型。大部分基于拦截的AOP框架,例如NanningJboss4,都只提供环绕通知。

AspectJ一样,Spring提供所有类型的通知,我们推荐你使用尽量简单的通知类型来实现需要的功能。用最合适的通知类型可以使得编程模型变得简单,并且能够避免很多潜在的错误。

切入点(pointcut)和连接点(joinpoint)匹配的概念是AOP的关键

Spring目前仅支持使用方法调用作为连接点(join point)(Springbean上通知方法的执行)

Spring实现AOP的方法跟其他的框架不同。Spring并不是要尝试提供最完整的AOP实现(尽管Spring AOP有这个能力), 相反的,它其实侧重于提供一种AOP实现和Spring IoC容器的整合,用于帮助解决在企业级开发中的常见问题。

 

 

原创粉丝点击