`

AOP里面3个概念Advice,PointCut,Advisor(转载)

    博客分类:
  • java
阅读更多

文章分类:Java编程

http://blog.donews.com/shanyou/archive/2005/04/16/338539.aspx

处理逻辑(Advice):在某个连接点所采用的处理逻辑。

切点(PointCut):一系列连接点的集合,它指明处理方式(Advice)将在何处被触发,可以使用正则表达式表达。

Advisor:是PointCut和Advice的综合体,完整描述了一个advice将会在pointcut所定义的位置被触发。

附注:

AOP全名Aspect - Oriented Programming,我们先来看看XXX - Oriented的意义,通常翻译「XXX导向」,也就是以XXX为中心,例如中文中「客户导向」就是以客户为中心,而「对象导向」(OOP:Object - Oriented Programming)就是以对象为中心的程序设计。
  自然的,Aspect - Oriented Programming,就是「Aspect导向程序设计」,也就是以Aspect为中心的程序设计,但什么是Aspect?中文直译通常是「方面」,但这个名词容易使人混淆。
  牛津字典中的英英解释对Aspect是:particular part or feature of sth being considerd .
  所以Aspect在英文中不只有「方面」的意思,还有部份(part)的意思。中文中称「就这个方面来说」,通常指的是「就这个角度来说」或「就这个方向来说」,这个解释不适用于AOP中的Aspect。如果英文中说from this aspect of sth,除了可以翻译为上面两句的意义之外,还可以翻作「就这个部份来说」。
  以我们的前一个主题中的记录(log)动作插入至HelloSpeaker对象的hello () 中为例,我们说「就记录这个部份」是不属于HelloSpeaker职责的,它被硬生生切入HelloSpeaker中,英文中我们可以说:The logging aspect of the "hello" method doesn 't belong to the job of HelloSpeaker.
   所以以整个方法的执行流程来说,如果执行流程是纵向的,则记录这个动作硬生生的「横切」入其中,这个横切入的部份我们就称之为Aspect,它是横切关 注点(crosscutting concern,一个concern可以像是权限检查、事务等等)的模块化,将那些散落在对象中各处的程序代码聚集起来。
  所以Aspect要用中文表达的话,适切一些的名词该是「横切面」或「切面」。AOP关注于Aspect,将这些Aspect视作中心进行设计,使其 中从职责被混淆的对象中分离出来,除了使原对象的职责更清楚之外,被分离出来的Aspect也可以设计的通用化,可运用于不同的场合。
  来看事务管理这个Aspect如何在动态代理下被抽取出来,下面是一个简单的概念,基本上是在Handler中先激活事务,执行存储层动作,方法执行成功则提交(commit),失败则回滚(rollback):
  代码 :



TransactionHandler . java



public class TransactionHandler implements InvocationHandler {



private Object delegate ;







public Object bind ( Object obj ) {



this . delegate = obj ;



return Proxy . new ProxyInstance (.., .., ..);



}



public Object invoke ( Object proxy , Method method , Object [] args ) {



Object result = null ;







.....







YourTransaction transaction = null ;



try {



transaction = yourMethodForGettingTransaction ();







result = method . invoke ( delegate , args );







transaction . commit ();



}



catch ( YourException e ) {



if ( transaction != null ) {



try {



transaction . rollback ();



}



catch ( Exception e ) {}



}



}







....







return result ;



}



}



  在AOP中,有好几个关键的概念,然而其中更主要的是:PointCut、Advice与Advisor。这些术语并不是很直观,我们配合我们上一个主题的HelloSpeaker来说明会比较容易理解。
  PointCut是JointPoint的集合,JointPoint是指Aspect加入的阶段点,例如某个方法被调用,某个成员被存取(Spring不支持),或是某个例外被丢出,以我们前一个主题的HelloSpeaker为例,hello () 方法就是一个JointPoint。PointCut为JointPoint的集合,意味着多个方法或例外丢出可以使用同一个处理建议(Advice)。
  Advice是在JointPoint上所要调用的处理建议(在JointPoint上所采取的动作,许多AOP框架通常以interceptor来实作Advice,之后会介绍),例如记录、事务处理、权限检查等。
  Advice类型(advice type)有Around、Before、Throws、After returning。这些Advice类型会分别在以下的时机被调用:在JointPoint前后、JointPoint前、JointPoint丢出例 外时、JointPoint执行完毕后。
  就我们上一个例子来说,我们在hello () 这 个JointPoint上会调用Around Advice,即我们的LogHandler。事务管理调用的Advice类型也是属于Around Advice,即上面的TransactionHandler,调用的JointPoint可能是某个DAO对象的saveXXX () 方法。
  Advisor将PointCut与Advice组合在一起,我们前一个主题中的HelloSpeaker例子很简单,故而没有使用到Advisor,之后会介绍到Advisor。
  补充:动态代理是比较常见的AOP实作策略,在《Expert One - on - One J2EE Development WIthout EJB》 Rod Johnson、Juergen Hoeller中的第八章中有提到,AOP的实作有五个主要的策略:



Dynamic Proxies

Dynamic Byte Code Generation

Java Code Generation

Use of a Custon Class Loader

Language Extensions

分享到:
评论

相关推荐

    Spring AOP Example – Pointcut , Advisor

    本篇文章将详细讲解Spring AOP的实例,包括Pointcut和Advisor两个关键概念,同时结合源码和工具进行深入探讨。 首先,让我们了解什么是Spring AOP。AOP(Aspect-Oriented Programming)是一种编程范式,它允许...

    Spring AOP 拦截器 Advisor

    在 Spring AOP 中,Advisor 是一个组合了通知(Advice)和切入点(Pointcut)的对象,它定义了何时以及如何执行特定的操作。 首先,我们要理解 AOP(面向切面编程)的核心概念。AOP 是一种编程范式,旨在减少代码...

    Spring AOP中文教程

    总之,Spring AOP是Java开发中实现关注点分离的强大工具,通过理解advice、pointcut和advisor这三个核心概念,我们可以有效地利用它来提高代码的可维护性和可扩展性。对于初学者来说,通过实践和理解这些概念,可以...

    spring-aop源码解读

    在Spring AOP中,主要有三个核心概念:Advice、Pointcut和Advisor。 1. Advice(通知): Advice描述了在特定连接点(Join Point)上执行的动作。在Spring AOP中,Advice主要与方法调用相关,用于向现有方法添加...

    SPRING:aspect和advisor区别

    理解这两个概念的区别有助于开发者更高效地利用Spring AOP来解决实际问题。 ### 参考资料 - [Spring 官方文档](https://docs.spring.io/spring-framework/docs/current/reference/html/aop.html) - [Spring AOP ...

    Spring AOP

    3. **Advisor**:Advisor是将Advice和Pointcut组合在一起的组件。它负责在正确的时间、正确的地点应用Advice。在Spring中,Advisor可以通过XML配置文件或注解来定义。 在实现Spring AOP的例子中,我们创建了一个`...

    Spring AOP实现

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件...通过理解advice、pointcut和advisor这三个核心概念,开发者可以更有效地利用Spring AOP实现日志记录、事务管理等各种功能,提高代码的可维护性和可扩展性。

    spring aop 详细介绍

    AOP的核心概念包括Advice、Pointcut和Advisor。 1. **Advice(通知)**: Advice是指在特定连接点(Joinpoint)执行的代码片段,它代表了横切关注点的实现。在Spring AOP中,Advice有四种类型: - **前置通知...

    使用Spring配置文件实现AOP

    在Spring中,AOP的实现依赖于两个主要组件:通知(Advice)和切点(Pointcut)。通知是实际执行的增强代码,如方法调用前的记录日志;切点是通知应该应用到的方法或类。Spring支持五种类型的的通知:前置通知...

    aopalliance-1.0.jar下载

    1. Advisor接口:Advisor是AOP的核心概念,它封装了Pointcut(切入点)和Advice(通知)。一个Advisor可以识别何时应用特定的Advice,并决定在何处应用。 2. Pointcut接口:Pointcut是程序执行中的一个特定点,如...

    应用Spring AOP(二)-------通过Advisor指定切入点

    Spring AOP通过代理模式实现了这一功能,提供了切点(Pointcut)、通知(Advice)、切面(Aspect)、织入(Weaving)等关键概念。 在Spring中,切入点定义了我们希望执行增强的地方。它可以是一个方法签名、类名...

    Spring AOP - Advice

    - XML配置:通过`<aop:config>`标签定义切面,然后使用`<aop:advisor>`标签来声明具体的Advice。 ```xml <aop:config> <aop:aspect ref="myAspect"> <aop:before method="beforeMethod" pointcut="execution(* ...

    org.aopalliance.aop.Advice.jar

    例如,我们可以使用`<aop:pointcut>`定义一个切入点表达式,然后在`<aop:advisor>`中引用这个切入点,并指定对应的Advice。 总结: `org.aopalliance.aop.Advice.jar`和`net.springsource.cglib-2.2.0.jar`是...

    aop的详细总结(包含例子)

    Advisor在Spring AOP中相当于Aspect,结合了Pointcut和Advice,提供了更灵活的配置方式。 七、AOP ProxyFactory和自动代理 ProxyFactory用于创建代理对象,而自动代理则是Spring框架自动为满足条件的对象创建代理。...

    Spring源代码解析(五):Spring_AOP获取Proxy.doc

    3. **Advisor**:顾问,将Advice和Pointcut结合在一起,定义何时何地应用哪个Advice。DefaultPointcutAdvisor是Spring提供的一个Advisor实现,它包含Advice和Pointcut属性,允许我们自定义这两部分。 接下来,我们...

    spring_aop_拦截实例

    `Advisor`是一个组合了切点(Pointcut)和通知的对象,它定义了拦截哪些方法以及如何拦截。而`Pointcut`则定义了匹配的方法签名,决定了拦截器的生效范围。 例如,我们可以创建一个`Pointcut`来匹配所有标注了特定...

    aop所依赖的所有包

    它定义了一些基础的切面接口,如Advisor(顾问)、Pointcut(切点)和Advice(通知),这些接口在不同的AOP框架中通用,有助于实现跨框架的切面代码重用。 Aspects则是AspectJ中的核心概念,它代表了关注点的封装...

    SpringAOP1.zip

    <aop:advisor advice-ref="loggingAdvice" pointcut-ref="serviceMethods"/> </aop:config> <aop:aspect id="loggingAdvice"> <aop:before method="beforeMethod" pointcut-ref="serviceMethods"/> <aop:after ...

    Spring AOP框架实现的结构分析

    然后,我们将介绍 Spring AOP 框架所涉及到的核心组件列表,包括 Advisor、Advice、Pointcut、Advised、AopProxy 和 AopProxyFactory 等组件,并详细介绍它们之间的结构关系图。 首先,让我们来了解 AOP 的基本概念...

Global site tag (gtag.js) - Google Analytics