`

AspectJ的基本类型

 
阅读更多

1 连接点

   连接点是程度控制流中的事件,比如方法的调用、需要修改的域、要计算的表达式、要执行的发放的第几行等。

   下面是Aspectj将要显示为连接点的事件:

  • 对方法或构造函数的调用
  • 方法、构造函数或者advice体的执行
  • 对一个域的访问或修改
  • 类和对象的初始化
  • 异常处理的执行:(通过抛出异常,after()throwing advice 可以用来捕捉任何连接点退出的信息)

2 切入点

    切入点用于选择连接点。它扮演过滤的角色,匹配符合其定义的连接点,阻塞所有其他的连接点。

    例如,pointcut call(String toString())将匹配对名为toString、无参数且返回值为一个字符串的发放的调用。

    Aspectj支持三种不同种类的切入点:

  • 也是最重要的一类,匹配基于连接点(方法调用、异常处理的执行、类的静态发放初始化等)的连接点
  • 匹配基于范围的连接点。如,引起连接点的代码是否存在于一个特定的包中?连接点是否发生那个给定操作的控制流中?
  • 最后一类切入点匹配基于自身上下文信息的连接点。如,当前执行的对象是否是那个给定类型的实例。

   切入点可以命名可以匿名,命名切入点可以使代码更高效更清晰。使用关键字pointcut可以声明命名的切入点。pointcut声明可以出现在类和aspect中,但是不能在接口中

  

   pointcut声明的一般形式如下:

   [visibility-modifier] pointcut name(parameterList) : PointcutExpr;

实例:

   pointcut leakedException():dbExceptionHandler && !inPersistenceLayer();

3 advice

   切入点是匹配连接点的谓词,而advice则是指定在这些连接点处做的动作。每个advice与一个切入点(命名的或者匿名的)关联,并指定在该切入点匹配的连接点之前、之后或周围想要执行的操作。advice声明可以包括参数,参数值可以在advice体中引用,其中参数值是由调用者显示传递的,而advice体中的参数值是由切入点提供的。

   基本的advice声明的类型有before advice、after advice、around advice,如下所示:

   before(ParameterList) : PointcutExpr{ ... };

   after(ParameterList) : returning : PointcutExpr{ ... };

   after(ParameterList : throwing : PointcutExpr{ ... };

   Type around(ParameterList) : PointcutExpr{ ... };

 

   匿名切入点示例:

   after(Account acc, Money amount)returning :

       execution(void Account.*(Money)) &&

       args(amount) &&

       this(acc){

            acc.getStatement().recordTransaction(thisJoinPointStaticPart, amount);

   如下等效:

   pointcut accountUpdate(Account acc, Money amount) :

        execution(void Account.*(Money)) &&

        args(amount) &&

        this(acc);

   after(Account acc, Money amount) returning :

       accountUpdate(acc, amount){

           acc.getStatement().recordTransaction(thisJoinPointStaticPart, amount);

   }

       }

   等效

   

分享到:
评论

相关推荐

    aspectJ

    学习AspectJ,你需要理解其基本概念,并掌握如何定义和使用切面。同时,熟悉AspectJ的语法和工具,如ajc编译器和AspectJ Weaver,能让你在实际项目中更好地应用面向方面的编程。最后,实践是检验理论的最好方式,...

    book :aspectj in action

    在这本书中,作者深入浅出地阐述了AspectJ的基本概念和核心特性,包括切面、通知(advice)、连接点(join points)、切入点(pointcuts)以及引入(introductions)。他们通过丰富的实例和实际应用来展示如何利用...

    AspectJ_Cookbook_English_edition

    1. **AspectJ基础**:介绍AspectJ的基本元素,包括切面、通知(advice)、连接点(join point)、切点(pointcut)和织入(weaving)。这些概念构成了AspectJ的基础,理解它们是使用AspectJ的前提。 2. **切面和...

    AspectJ程序设计指南

    - 介绍了AspectJ的基本概念和技术,为后续深入学习奠定了基础。 #### 二、AspectJ语言 **2.1 概述** - **AspectJ语言**扩展了Java语言,支持面向切面编程的各种特性。 - 它包括切点、通知、类型间声明等方面的...

    The AspectJ Programming Guide.2003

    AspectJ支持多种类型的通知,包括前置通知、后置通知、环绕通知等,每种通知类型在连接点的不同阶段执行。 #### 交叉类型声明(Inter-type declarations) 交叉类型声明允许修改现有类的结构,如添加新的方法或字段...

    aspectj.zip

    描述中的"aspectj.zip"没有给出具体信息,但我们可以假设它包含了AspectJ的基本组成部分,比如AspectJ的库文件(.jar)、用户指南、API文档、示例代码和相关的构建工具。这些内容有助于初学者快速上手,同时也能为...

    AspectJ in Action 2nd Edition

    - **内容深度**:本书不仅涵盖了AspectJ的基本概念和语法,还深入探讨了如何在实际项目中有效地运用AspectJ。 - **实战案例**:通过多个实际案例的分析,展示了如何使用AspectJ解决复杂的企业级问题。 - **技术前瞻...

    aspectj,aspectjrt,weaver等

    了解并熟练掌握AspectJ、AspectJRT 和 AspectWeaver 的基本概念和用法,对于深入学习Spring AOP和提升应用程序的可维护性至关重要。在实践中,初学者可以逐步通过编写简单的切面、配置织入方式,逐渐熟悉这些工具和...

    aspectj的有关知识点

    AspectJ 还提供了切入点表达式(Pointcut Expression),这是 Pointcut 的一种更高级形式,可以结合方法签名、类型信息和注解来指定连接点。例如,`execution(* com.example.service.*.*(..))` 将匹配 `...

    Manning.AspectJ.In.Action

    - **基本语法**:介绍了AspectJ中的基本语法元素,包括切面、通知、切点等。 - **高级特性**:深入探讨了AspectJ提供的高级功能,如声明式事务管理、动态代理等。 ### 4. 实战案例 - **日志记录**:展示如何使用...

    Manning AspectJ in Action.pdf

    同时,也会介绍AspectJ提供的API,如`@Aspect`注解、`@Before`、`@After`、`@Around`等通知类型。 3. **织入过程**:织入是将切面应用到目标代码的过程,可以发生在编译时、类加载时或运行时。书中会详细解释这三种...

    Spring AOP @AspectJ 入门实例

    首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,即跨越多个对象的行为或责任。这些切面可以包含业务逻辑、日志、安全性等多个方面,通过“织入”到程序的不同点来实现代码的复用...

    aspectj+aspectjrt+aspectjweaver+aopalliance.rar

    2. **AspectJ Runtime (aspectjrt.jar)**:这是AspectJ运行时库,包含运行时需要的基本类和接口,用于支持AOP的执行。它提供了加载、解析和执行AspectJ代码的功能,是其他组件(如weaver)的基础。 3. **AspectJ ...

    Spring AOP + AspectJ annotation example

    除了基本的通知类型,AspectJ还提供了更复杂的用法,如`@Around`,它允许完全控制方法的执行流程,以及`@Pointcut`定义可重用的切入点表达式。 在实际项目中,Spring AOP + AspectJ注解的组合可以帮助我们编写整洁...

    android中aspectj 的使用

    - 检查方法返回类型是否为基本数据类型。 4. **类型检查与条件判断**: - 如果方法名为`getClass`则跳过后续逻辑。 - 否则更新`oldmethodName`变量并进行后续处理。 - 判断方法返回类型是否为基本数据类型。 -...

    AspectJ的基本用法

    AspectJ定义了几种类型的Join Points: - method call:函数调用 - method execution:函数执行 - constructor call:构造函数调用 - constructor execution:构造函数执行 - field get:字段获取 - field set...

    Spring的AOP实例(XML+@AspectJ双版本解析+源码+类库)

    通过以上讨论,我们不仅理解了Spring AOP的基本概念,还掌握了XML和@AspectJ两种实现方式的细节。结合提供的源码,可以进一步深入到Spring AOP的内部运作,提升我们的编程技能和问题解决能力。在实际工作中,选择...

    aspectj-demo.zip

    在这个名为"aspectj-demo.zip"的压缩包中,包含了一个使用AspectJ的Java控制台项目的示例,旨在帮助开发者理解并实践AspectJ的基本用法。这个项目是在JDK 1.8环境下运行,使用了AspectJ的1.8.7版本,并且在Windows ...

    aspectj_in_action_second_edition

    《AspectJ in Action》第二版不仅详细介绍了AspectJ的基本概念和技术细节,还包含了大量实际案例和最佳实践。书中特别强调了AspectJ与Spring框架的结合使用,这在企业级应用中尤为重要。通过学习本书,读者不仅可以...

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    **一、AOP基本概念** AOP的核心概念有切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)和引入(Introduction)。切面是关注点的模块化,连接点是在程序执行过程中可以插入切面的特定点,如...

Global site tag (gtag.js) - Google Analytics