`
kang
  • 浏览: 474438 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

AOP术语

阅读更多
本文转载自http://blog.csdn.net/myyate/archive/2008/03/24/2213966.aspx

PS:概念清楚,解释通俗。


==== 关注点 (Concern)====
关注点就是我们要考察或解决的问题。如订单的处理,用户的验证、用户日志记录等都属于关注点。
 
关注点中的核心关注点 (Core Concerns) ,是指系统中的核心功能,即真正的商业逻辑。如在一个电子商务系统中,订单处理、客户管理、库存及物流管理都是属于系统中的核心关注点。
 
还有一种关注点叫横切关注点 (Crosscutting Concerns) ,他们分散在每个各个模块中解决同一样的问题,跨越多个模块。如用户验证、日志管理、事务处理、数据缓存都属于横切关注点。
 
AOP 的编程方法中,主要在于对关注点的提起及抽象 。我们可以把一个复杂的系统看作是由多个关注点来有机组合来实现,一个典型的系统可能会包括几个方面的关注点,如核心业务逻辑、性能、数据存储、日志、授权、安全、线程及错误检查等,另外还有开发过程中的关注点,如易维护、易扩展等。
 
 
==== 切面 (Aspect) ====
 
切面是一个关注点的模块化 ,这个关注点可能会横切多个对象和模块,事务管理是横切关注点的很好的例子。它是一个抽象的概念,从软件的角度来说是指在应用程序不同模块中的某一个领域或方面
Spring 2.0 AOP 中,切面可以使用基于 XML Schema 的风格 或者以 @Aspect 注解 @AspectJ 风格)来实现
 
下面的例子是基于 xml schema 风格来定义一个 Aspect( 红字部分 )
<aop:aspect id="aspectDemo" ref="aspectBean">
< aop:pointcut id = "myPointcut" expression = "execution(* package1.Foo.handle*(..)" />
< aop:before pointcut -ref = "myPointcut" method = "doLog" />
</aop:aspect >
 
这个定义的意思是:每执行到 package1.Foo 类的以 handle 开头的方法前,就会先执行 aspectBean doLog 方法
 
 
==== 连接点 (Join point) ====
 
连接点就是在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。这个点可以是一个方法、一个属性、构造函数、类静态初始化块,甚至一条语句。 而对于 SPRING 2.0 AOP 来说,连接点只能是方法,这个一定要记住~!每一个方法都可以看成为一个连接点,只有被纳入某个 CutPoint JointPoint 才有可能被 Advice
 
通过声明一个org.aspectj.lang.JoinPoint 类型的参数可以使通知(Advice)的主体部分获得连接点信息。
 
JoinPointCutPoint 之间的关系见下面的CutPoint 的讲解
 
==== 切入点 (Pointcuts) ====
切入点指一个或多个连接点,可以理解成连接电点的集合 . Advice 是通过 Pointcut 来连接和介入进你的 JointPoint 的。
 
比如在前面的例子中,定义了
< aop:pointcut id = "myPointcut"
expression = "execution(* package1.Foo.handle*(..)" />
那么这就是定义了一个PointCut ,该Pointcut 表示“在package1.Foo类所有以handle开头的方法”
假设package1.Foo类里类似于:
    Public class Foo {
       public handleUpload(){..}
       public handleReadFile(){..}
       .....
    }
那么handleUpload 是一个JointPointhandleReadFile 也是一个Joint,那么上面定义的id=”myPointcut”PointCut 则是这两个JointPoint 的集合
 
==== 通知 (Advice) ====
Advice定义了切面中的实际逻辑(即实现 ) ,比如日志的写入的实际代码。换一种说法Advice 是指在定义好的切入点处,所要执行的程序代码
 
通知有以下几种:
前置通知( Before advice :在切入点匹配的方法执行之前运行使用@Before 注解来声明
 
返回后通知( After returning advice :在切入点匹配的方法返回的时候执行。使用 @AfterReturning 注解来声明
 
抛出后通知( After throwing advice : 在切入点匹配的方法执行时抛出异常的时候运行。使用 @AfterThrowing 注解来声明
 
后通知( After (finally) advice :不论切入点匹配的方法是正常结束的,还是抛出异常结束的,在它结束后(finally)后通知(After (finally) advice)都会运行。使用 @After 注解来声明。这个通知必须做好处理正常返回和异常返回两种情况。通常用来释放资源。
 
环绕通知( Around Advice :环绕通知既在切入点匹配的方法执行之前又在执行之后运行。并且,它可以决定这个方法在什么时候执行,如何执行,甚至是否执行。在环绕通知中,除了可以自由添加需要的横切功能以外,还需要负责主动调用连接点 ( 通过 proceed) 来执行激活连接点的程序请尽量使用最简单的满足你需求的通知。(比如如果前置通知也可以适用的情况下,就不要使用环绕通知)
 
环绕通知使用 @Around 注解来声明。而且该通知对应的方法的第一个参数必须是 ProceedingJoinPoint 类型 。在通知体内(即通知的具体方法内),调用 ProceedingJoinPoint proceed() 方法来执行连接点方法
 
 
==== 引入 (Introduction) ====
引入是指给一个现有类添加方法或字段属性,引入还可以在不改变现有类代码的情况下,让现有的 Java 类实现新的接口 以及一个对应的实现 )。相对于 Advice 可以动态改变程序的功能或流程来说,引介 (Introduction) 则用来改变一个类的静态结构 。比如你可以使用一个引入来使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 注解风格的切面声明,对于使用这些风格的用户来说, AOP 代理的创建是透明
 
Spring 缺省使用 J2SE 动态代理( dynamic proxies 来作为 AOP 的代理。这样任何接口都可以被代理。
Spring 也支持使用 CGLIB 代理 . 对于需要代理类而不是代理接口的时候 CGLIB 代理是很有必要的 如果一个业务对象并没有实现一个接口,默认就会使用 CGLIB 作为 面向接口编程 的最佳实践,业务对象通常都会实现一个或多个接口。
==== 织入( Weaving ====
把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象,这样一个行为就叫做Weaving。 这些可以在编译时(例如使用AspectJ 编译器),类加载时和运行时完成。 Spring 和其他纯 Java AOP 框架一样,在运行时完成织入
 
其实织入的方式有3种:
1、运行时织入-即在 java运行的过程中,使用Java提供代理来实现织入。根据代理产生方式的不同,运行时织入又可以进一步分为J2SE动态代理及动态字节码生成两种方式。由于J2SE动态代理只能代理接口,因此,需要借助于一些动态字节码生成器来实现对类的动态代理。大多数 AOP 实现都是采用这种运行时织入的方式,包括 Spring
 
2、类加载器织入-指通过自定义的类加载器,在虚拟机 JVM加载字节码的时候进行织入,比如AspectWerkz ( 已并入 AspecJ ) JBoss 就使用这种方式
 
3、编译器织入-使用专门的编译器来编译包括切面模块在内的整个应用程序,在编译的过程中实现织入,这种织入是功能最强大的。编译器织入的 AOP实现一般都是基于语言扩展的方式,即通过对标准java语言进行一些简单的扩展,加入一些专用于处理AOP模块的关键字,定义一套语言规范,通过这套语言规范来开发切面模块,使用自己的编译器来生成java字节码。AspectJ 主要就是是使用这种织入方式
 
PS:
连接点(join point): 它是指应用中执行的某个点,即程序执行流程中的某个点。如执行某个语句或者语句块、执行某个方法、装载某个类、抛出某个异常……,Spring目前只支持方法级别的。
切入点(pointcut): 切 入点是连接点的集合,它通常和通知(Advice)联系在一起,是切面和程序流程的交叉点。比如说,定义了一个pointcut,它将抛出异常 ClassNotFoundException和某个通知联系起来,那么在程序执行过程中,如果抛出了该异常,那么相应的通知就会被触发执行。 Spring中是实现了MethodInterceptor,通俗一点说,在连接点上,切入点决定在什么情况下调用哪个Advice。
装备(advice): 指 切面在程序运行到某个连接点所触发的动作。在这个动作种我们可以定义自己的处理逻辑。通知需要利用切入点和连接点联系起来才会被触发。目前AOP定义了五 种通知:前置通知(Before advice)、后置通知(After advice)、环绕通知(Around Advice)、异常通知(After throwing advice)、返回后通知(After returning advice)。

发表于 @ 2008年03月24日 16:49:00 |评论(0 ) |收藏

 

 

分享到:
评论

相关推荐

    Spring aop术语详解

    Spring AOP 术语详解 Spring 中的 AOP 术语可能会使人感到困惑,但本文将对 AOP 术语进行通俗的解释。 关注点(Concern) 关注点是我们要考察或解决的问题。如订单的处理、用户的验证、用户日志记录等都属于关注...

    Spring 2.5 AOP 例子

    四、AOP术语 - 切面(Aspect):定义一组相关或相互关联的通知和切点的模块化组件。 - 通知(Advice):在特定连接点执行的代码,例如日志记录、事务管理等。 - 切点(Pointcut):定义在何处应用通知的规则。可以是...

    Spring5_AOP.pdf

    在AOP术语中,连接点通常指那些可以被增强操作的位置。 切入点(Pointcut)是匹配连接点的表达式。通过切入点,可以定义在哪些具体的连接点上应用通知,它是AOP中用于定义何时以及在哪里执行通知的模块。切入点的...

    基于java的企业级应用开发:Spring AOP简介.ppt

    **AOP术语详解** 1. **Aspect**:切面是AOP的核心概念,它封装了特定的横切关注点,例如事务管理和日志记录。一个切面可以包含多个通知(Advice)和切点(Pointcut)。 2. **Joinpoint**:连接点是指程序执行过程...

    第3章 Spring AOP.ppt

    【AOP 术语解析】 1. **Aspect(切面)**:切面是封装了横切关注点的类,比如事务管理、日志记录等。它结合了多个通知(Advice)和切入点(Pointcut)。 2. **Joinpoint(连接点)**:程序执行过程中的特定点,比如...

    aop.zip_884AOP_java aop原理_javaaop原理

    **AOP术语解释:** 1. **切面(Aspect)**:切面是AOP的核心,它封装了多个相关操作的逻辑,这些操作被称为通知(Advice)。 2. **通知(Advice)**:在特定连接点(Join Point)执行的代码,如方法调用前、后或异常...

    AOP控制权限编程例子

    **AOP术语** 1. **切面(Aspect)**:切面是关注点的模块化,它封装了横切关注点,如日志、事务和安全性。 2. **连接点(Join Point)**:程序执行中的某个特定点,例如方法的调用。 3. **通知(Advice)**:在...

    spring-aop.pdf 源码电子书

    1. 通知(Advice):这是AOP术语中最核心的概念。通知定义了切面应用到目标对象时所要执行的行为。它代表了“何时”(何时执行)和“做什么”(执行什么动作)。通知类型包括前置通知(Before)、后置通知(After)...

    AOP 设计模式

    AOP术语** - **连接点(Joinpoint)**: 程序执行中的特定点,如方法调用、异常抛出等。 - **切点(Pointcut)**: 定义一组连接点,是实际应用AOP的地方。 - **通知(Advice)**: 在切点处执行的代码,可以是环绕...

    AOP技术总结 2

    ##### 2.1 AOP术语定义 - **关注点(Concern)**:指一个具体的业务目的或功能需求。例如,一个银行系统的业务关注点可能是账户转账,而横切关注点(Crosscutting Concerns)则可能包括日志记录、事务管理、安全性...

    spring2-aop入门实例教程

    - **AOP术语介绍**: - **切面(Aspect)**:包含多个切入点和相应的通知的集合。 - **连接点(Joinpoint)**:程序执行过程中的某个特定点,如方法调用或异常抛出。 - **切入点(Pointcut)**:匹配连接点的一个...

    Spring_AOP_Demo

    二、AOP术语 1. 切面(Aspect):切面是关注点的模块化,它包含连接点、通知、切入点表达式等。 2. 连接点(Join Point):程序执行过程中的某个特定点,如方法调用或异常处理。 3. 通知(Advice):在特定连接点...

    Jboss aop user guide

    本节介绍了一些基本的 AOP 术语,包括但不限于: - **Aspect(切面)**:代表了一个横切关注点,如日志记录或事务管理。 - **Join Point(连接点)**:程序执行中的特定位置,如方法调用或异常抛出。 - **Pointcut...

    2024-spring-aop学习项目

    二、AOP术语解析 1. 切面(Aspect):包含关注点和通知的模块化单元,是AOP的核心。 2. 连接点(Join Point):程序执行过程中的特定点,如方法调用、异常抛出等。 3. 通知(Advice):在特定连接点执行的代码,可以...

    Spring-AOP .pptx

    2. **AOP术语** - **连接点(Joinpoint)**:程序执行的特定位置,如方法调用前/后、异常处理等。 - **切点(Pointcut)**:根据一定条件选择的连接点,用于指定何时应用增强。 - **增强(Advice)**:在特定连接点执行...

    Spring AOP 工程样例

    **AOP术语** 1. **切面(Aspect)**:切面是关注点的模块化,包含了通知和切入点定义。 2. **通知(Advice)**:通知是在特定连接点上执行的动作,如方法调用前、后或异常发生时。 3. **连接点(Join Point)**:...

    spring对AOP的支持(使用Spring的配置文件来演示)

    **AOP术语** 1. **切面(Aspect)**:切面是AOP的核心,它将关注点(如日志、事务处理)与业务逻辑分离,形成独立的模块。 2. **连接点(Join Point)**:程序执行过程中的特定点,如方法调用、异常处理等。 3. *...

    spring aop

    二、AOP术语解析 1. 切面(Aspect):切面是关注点的模块化,它可以包含多个通知(advice)。 2. 通知(Advice):通知定义了切面的具体行为,即在特定连接点(join point)上执行的代码。 3. 连接点(Join Point)...

    SpringAOP例子

    二、Spring AOP术语 1. 切面(Aspect):包含关注点的模块化单元,通常包括通知和切点定义。 2. 切点(Pointcut):匹配特定方法执行的具体位置。 3. 通知(Advice):在特定切点上执行的代码,如前置通知、后置通知...

    介绍spring AOP

    2. **切点(Pointcut)**:是AOP术语,用于指定哪些连接点(join point)将应用切面的通知。连接点是指程序执行过程中的某一点,如方法调用、异常抛出等。 3. **通知(Advice)**:是在切点上执行的动作,可以在...

Global site tag (gtag.js) - Google Analytics