AOP概念
首先让我们从定义一些重要的AOP概念开始。这些术语不是Spring特有的。 不幸的是,AOP术语并不是特别的直观;如果Spring使用自己的术语,将会变得更加令人困惑。
切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解(@AspectJ风格)来实现。
连接点(Joinpoint): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在Spring AOP中,一个连接点 总是 代表一个方法的执行。 通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。
通知(Advice): 在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。
切入点(Pointcut): 匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。
引入(Introduction): (也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。 Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。 例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(advised) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
AOP代理(AOP Proxy): AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 注意:Spring 2.0最新引入的基于模式(schema-based)风格和@AspectJ注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。
织入(Weaving): 把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。 这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。 Spring和其他纯Java AOP框架一样,在运行时完成织入。
通知的类型:
前置通知(Before advice): 在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。
返回后通知(After returning advice): 在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
抛出异常后通知(After throwing advice): 在方法抛出异常退出时执行的通知。
后通知(After (finally) advice): 当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
环绕通知(Around Advice): 包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。
环绕通知是最常用的一种通知类型。大部分基于拦截的AOP框架,例如Nanning和JBoss4,都只提供环绕通知。
跟AspectJ一样,Spring提供所有类型的通知,我们推荐你使用尽量简单的通知类型来实现需要的功能。 例如,如果你只是需要用一个方法的返回值来更新缓存,虽然使用环绕通知也能完成同样的事情, 但是你最好使用After returning通知而不是环绕通知。 用最合适的通知类型可以使得编程模型变得简单,并且能够避免很多潜在的错误。 比如,你不需要调用 JoinPoint(用于Around Advice)的 proceed() 方法,就不会有调用的问题。
在Spring 2.0中,所有的通知参数都是静态类型,因此你可以使用合适的类型(例如一个方法执行后的返回值类型)作为通知的参数而不是使用一个对象数组。
切入点(pointcut)和连接点(join point)匹配的概念是AOP的关键,这使得AOP不同于其它仅仅提供拦截功能的旧技术。 切入点使得定位通知(advice)可独立于OO层次。 例如,一个提供声明式事务管理的around通知可以被应用到一组横跨多个对象中的方法上(例如服务层的所有业务操作)。
分享到:
相关推荐
### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程...
### AOP概念详解 #### 一、AOP概述 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在通过将横切关注点与业务逻辑分离,增强代码的可读性和可维护性。在企业级应用中,事务管理、日志...
### 一、AOP 概念解析 **1.1 AOP 的定义** AOP (Aspect Oriented Programming) 即面向切面编程,是一种编程范式,它允许程序员将横切关注点(Cross-cutting Concerns)模块化。在 Spring 框架中,AOP 主要用于实现...
"IOC(DI)与AOP概念的理解" IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是软件设计中两个重要的概念。控制反转的意思是依赖关系的获取方式被反转了。所谓依赖,从程序的角度看,...
**Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过定义“切面”来模块化横切关注点,比如日志、事务管理、性能监控等。在传统的...
### Spring AOP 概念及特点详解 #### 一、AOP 概念介绍 **AOP**(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在提高程序模块化程度的同时,简化复杂系统的开发过程。AOP 的核心思想是将横切...
**SPRING AOP 概念解析以及例子示范** 在Java开发中,Spring框架因其强大的功能和灵活的设计,被广泛应用于企业级应用。其中,AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它...
### Spring AOP 概念详解 #### 一、AOP基本概念 **Spring AOP** 是基于面向切面编程(Aspect Oriented Programming)的一种技术,主要用于处理横切关注点问题,比如日志记录、安全控制、事务管理等功能,这些功能...
首先,我们来理解一下AOP的基本概念。AOP的核心是切面(Aspect)和通知(Advice)。切面是跨越多个对象的行为或责任的模块化,它封装了多个类中相似的代码。通知则是在特定连接点(Join Point)执行的代码,如方法...
AOP的核心概念包括通知(Advice)、连接点(Joinpoint)、切入点(Pointcut)、切面(Aspect)、引入(Introduction)、目标(Target)和代理(Proxy)。以下是对这些概念的详细解释: 1. **通知(Advice)**:通知...
下面我们将详细探讨Spring AOP的概念及其应用。 1. 通知(Advice): 通知定义了在特定时刻执行的代码片段。Spring AOP支持五种类型的Advice: - Before通知:在目标方法执行前执行。 - After-returning通知:在...
AOP的核心概念包括: 1. **通知(Advice)**:通知定义了切面在何时何地执行。在Spring中,有五种不同类型的Advice:`Before`(前置通知)、`After-Returning`(返回后通知)、`After-Throwing`(异常后通知)、`...
它定义了一些核心的AOP概念,如拦截器(Interceptor)、通知(Advice)和切入点(Pointcut),这些都是AOP编程中的关键元素。通过提供统一的接口,AOP Alliance使得开发者可以在不关心具体实现的情况下,将AOP特性...
Spring框架中的AOP模块使用了动态代理来实现AOP概念。Spring AOP允许开发者定义切面,并在这些切面中指定拦截的方法。Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,...
总结来说,AOP Alliance 1.0是Java世界中AOP概念和实践的桥梁,它通过提供统一的接口标准,促进了不同AOP框架间的互操作性。这个资源包不仅包含了一个稳定的AOP实现,还为我们提供了理解、学习和使用面向切面编程的...
一、理解AOP概念 AOP的核心思想是将分散在各个模块中的交叉性代码(如日志、事务处理)抽取出来,形成独立的切面,以便于复用和维护。它提供了一种模块化的方式,使得我们可以专注于编写核心业务代码,而无需关心...
其中,AspectJX是基于Java代理的实现,它提供了一种简单的方式来引入AOP概念到Android项目中。AspectJX允许开发者定义切面(Aspect)和通知(Advice),在特定的连接点(Join Point)执行自定义的行为。 本例子中的...
**一、AOP概念** AOP(Aspect Oriented Programming)的核心是切面(Aspect),它将分散在多个对象中的共同行为(如日志、异常处理)抽象出来,形成独立的模块,这样可以提高代码的复用性和可维护性。切面通常由两个...
这个库包含了一些基本的AOP概念,如JoinPoint(连接点)、Pointcut(切点)、Advice(通知)等的接口。这些接口为创建和使用切面提供了通用的API,无论你选择使用Spring自己的AOP还是其他AOP实现,如AspectJ,都可以...
1. AOP概念:AOP允许我们将关注点(如日志、性能跟踪、异常处理等)从主业务逻辑中分离出来,创建切面(Aspect),并在特定的连接点(Join Point,如方法调用)应用这些切面。 2. Unity AOP:Unity提供了对AOP的...