当前位置:  编程语言>java/jsp

Spring AOP中Pointcut,dvice 和 Advisor三个概念介绍

 
    发布时间:2014-2-13  


    本文导语: Spring AOP中Pointcut,dvice 和 Advisor三个概念介绍在理解了Spring的AOP后,需要重点理解的三个概念是:Pointcut Advice Advisor(1)切入点 Pointcut 在介绍Pointcut之前,有必要先介绍...

Spring  AOPPointcut,dvice 和 Advisor三个概念介绍

在理解了Spring的AOP后,需要重点理解的三个概念是:Pointcut    Advice   Advisor

(1)切入点  Pointcut

              在介绍Pointcut之前,有必要先介绍  Join  Point(连接点)概念。

                         连接点:程序运行中的某个阶段点,比如方法的调用、异常的抛出等。比如方法doSome();

Pointcut是JoinPoint的集合,它是程序中需要注入Advice 的位置的集合,指明Advice要在什么样的条件下才能被触发。

               org.springframework.aop.pointcut接口用来指定到特定方法,

//源代码

                  public InterfacePointcut{

                     //用来将切入点限定在给定的目标类中

 ClassFilter   getClassFilter();

                     //用来判断切入点是否匹配目标类的给定的方法

  MethodMatcher  getMethodMatcher();

                       Pointcut   TRUE=TruePointcut.INSTANCE;

                  }

                  在Pointcut接口中主要有两个接口:ClassMatcher和MethodMatcer,有利于代码的重用。

(2)通知Advice

 它是某个连接点所采用的处理逻辑,也就是向连接点注入的代码。例如:输出日志信息   就是一个Advice

(3)Advisor

Advisor是Pointcut和Advice的配置器,它包括PointcutAdvice,是将Advice注入程序中Pointcut位置的代码

----------------------------------------------------------------------------------------------------------------------------

AOP的3个关键概念

  因为AOP的概念难于理解,所以在前面首先对Java动态代理机制进行了一下讲解,从而使读者能够循序渐进地来理解AOP的思想。

学习AOP,关键在于理解AOP的思想,能够使用AOP。对于AOP众多的概念,读者只要理解3个重要的概念即可。这3个概念是Pointcut、Advice和Advisor。

1  切入点(Pointcut)

  在介绍Pointcut,有必要先介绍一下Join Point(连接点)的概念。Join Point指的是程序运行中的某个阶段点,如某个方法调用、异常抛出等。前面示例中的doAuditing()方法就是一个Join Point,表示程序是要在这个地方加入Advice。

Pointcut是Join Point的集合,它是程序中需要注入Advice的位置的集合,指明Advice要在什么样的条件下才能被触发。

org.springframework.aop.pointcut 接口用来指定通知到特定的类和方法。查看spring下载包里的源文件pointcut.java路径是spring-framework-2.0-

m1/src/org/springframework/aop,可以看到Pointcut.java.源代码如下:

//******* Pointcut.java**************
package org.springframework.aop;
public interface Pointcut {
         //用来将切入点限定在给定的目标类中
         ClassFilter getClassFilter();
         //用来判断切入点是否匹配目标类给定的方法
         MethodMatcher getMethodMatcher();
         Pointcut TRUE = TruePointcut.INSTANCE;
}


代码说明

  接口ClassFilter,用来将切入点限定在给定的目标类中。

  接口MethodMatcher,用来判断切入点是否匹配目标类给定的方法。

从上面可以看出,在接口Pointcut中,主要包含两个接口:ClassFilter和MethodMatcher,有利于代码的重用。


2  通知(Advice)

Advice是某个连接点所采用的处理逻辑,也就是向连接点注入的代码。前面示例中提取出来输出日志信息的代码就是一个Advice,表示要在Join Point加入这

段代码。

3  Advisor

Advisor是Pointcut和Advice的配置器,它包括Pointcut和Advice,是将Advice注入程序中Pointcut位置的代码。

上面只是粗略地对AOP的3个概念进行一下说明,目的是让读者能够较快地进入到AOP中,接下来将会分别对这3个概念进行更加详细的讲解。


Spring的3种切入点(Pointcut)实现

Pointcut是Join Point的集合,它是程序中需要注入Advice的位置的集合。Spring主要提供了3种切入点(Pointcut)的实现:静态切入点、动态切入点和自定义切入点,下面分别进行讲解。

1  静态切入点

  静态切入点只限于给定的方法和目标类,而不考虑方法的参数。Spring在调用静态切入点时只在第一次的时候计算静态切入点的位置,然后把它缓存起来,

后就不需要再进行计算。使用org.springframework.aop.support.RegexpMethodPointcut 可以实现静态切入点,RegexpMethodPointcut是一个通用的正则表达

式切入点,它是通过jakarta oro来实现的,需要把jakarta-oro-2.0.8.jar加入到classpath中,它的正则表达式语法和jakarta oro的正则表达式语法是一样

的。使用RegexpMethodPointcut的一个示例代码如下:

<bean id="settersAndAbsquatulatePointcut"

   class="org.springframework.aop.support.RegexpMethodPointcut">

   <property name="patterns">

       <!--设定切入点-->

<list>

           <value>.*save.*</value>

           <value>.*do.* </value>

       </list>

   </property>

</bean>

代码说明:

.*save.*,表示所有以save开头的方法都是切入点。

 .* do.*,表示所有以do开头的方法都是切入点。

2  动态切入点

   动态切入点与静态切入点的区别是,它不仅限定于给点的方法和类,动态切入点还可以指定方法的参数。因为参数的变化性,所以动态切入点不能缓存,需要每次调用的时候都进行计算,因此使用动态切入点有很大的性能损耗。当切入点需要在执行时根据参数值来调用通知时,就需要使用动态切入点。Spring提供了一个内建的动态切入点:控制流切入点。此切入点匹配基于当前线程的调用堆栈。开发人员只有在当前线程执行时找到特定的类和特定的方法才返回true。其实大多数的切入点可以使用静态切入点,所以很少有机会创建动态切入点。

3  自定义切入点

   因为Spring中的切入点是Java类,而不是语言特性(如AspectJ),因此可以定义自定义切入点。因为AOP还没有完全成熟,Spring提供的文档在这方面也没有提供更详细的解释,所以这里将不再对动态切入点和自定义切入点进行更加详细的介绍。

    您可能感兴趣的文章:

  • 本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
    转载请注明:文章转载自:[169IT-IT技术资讯]
    本文标题:Spring AOP中Pointcut,dvice 和 Advisor三个概念介绍
相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3