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的语法和工具,如ajc编译器和AspectJ Weaver,能让你在实际项目中更好地应用面向方面的编程。最后,实践是检验理论的最好方式,...
了解并熟练掌握AspectJ、AspectJRT 和 AspectWeaver 的基本概念和用法,对于深入学习Spring AOP和提升应用程序的可维护性至关重要。在实践中,初学者可以逐步通过编写简单的切面、配置织入方式,逐渐熟悉这些工具和...
在这本书中,作者深入浅出地阐述了AspectJ的基本概念和核心特性,包括切面、通知(advice)、连接点(join points)、切入点(pointcuts)以及引入(introductions)。他们通过丰富的实例和实际应用来展示如何利用...
1. **AspectJ基础**:介绍AspectJ的基本元素,包括切面、通知(advice)、连接点(join point)、切点(pointcut)和织入(weaving)。这些概念构成了AspectJ的基础,理解它们是使用AspectJ的前提。 2. **切面和...
- 介绍了AspectJ的基本概念和技术,为后续深入学习奠定了基础。 #### 二、AspectJ语言 **2.1 概述** - **AspectJ语言**扩展了Java语言,支持面向切面编程的各种特性。 - 它包括切点、通知、类型间声明等方面的...
AspectJ支持多种类型的通知,包括前置通知、后置通知、环绕通知等,每种通知类型在连接点的不同阶段执行。 #### 交叉类型声明(Inter-type declarations) 交叉类型声明允许修改现有类的结构,如添加新的方法或字段...
描述中的"aspectj.zip"没有给出具体信息,但我们可以假设它包含了AspectJ的基本组成部分,比如AspectJ的库文件(.jar)、用户指南、API文档、示例代码和相关的构建工具。这些内容有助于初学者快速上手,同时也能为...
- **内容深度**:本书不仅涵盖了AspectJ的基本概念和语法,还深入探讨了如何在实际项目中有效地运用AspectJ。 - **实战案例**:通过多个实际案例的分析,展示了如何使用AspectJ解决复杂的企业级问题。 - **技术前瞻...
AspectJ 还提供了切入点表达式(Pointcut Expression),这是 Pointcut 的一种更高级形式,可以结合方法签名、类型信息和注解来指定连接点。例如,`execution(* com.example.service.*.*(..))` 将匹配 `...
- **基本语法**:介绍了AspectJ中的基本语法元素,包括切面、通知、切点等。 - **高级特性**:深入探讨了AspectJ提供的高级功能,如声明式事务管理、动态代理等。 ### 4. 实战案例 - **日志记录**:展示如何使用...
同时,也会介绍AspectJ提供的API,如`@Aspect`注解、`@Before`、`@After`、`@Around`等通知类型。 3. **织入过程**:织入是将切面应用到目标代码的过程,可以发生在编译时、类加载时或运行时。书中会详细解释这三种...
首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,即跨越多个对象的行为或责任。这些切面可以包含业务逻辑、日志、安全性等多个方面,通过“织入”到程序的不同点来实现代码的复用...
2. **AspectJ Runtime (aspectjrt.jar)**:这是AspectJ运行时库,包含运行时需要的基本类和接口,用于支持AOP的执行。它提供了加载、解析和执行AspectJ代码的功能,是其他组件(如weaver)的基础。 3. **AspectJ ...
除了基本的通知类型,AspectJ还提供了更复杂的用法,如`@Around`,它允许完全控制方法的执行流程,以及`@Pointcut`定义可重用的切入点表达式。 在实际项目中,Spring AOP + AspectJ注解的组合可以帮助我们编写整洁...
- 检查方法返回类型是否为基本数据类型。 4. **类型检查与条件判断**: - 如果方法名为`getClass`则跳过后续逻辑。 - 否则更新`oldmethodName`变量并进行后续处理。 - 判断方法返回类型是否为基本数据类型。 -...
AspectJ定义了几种类型的Join Points: - method call:函数调用 - method execution:函数执行 - constructor call:构造函数调用 - constructor execution:构造函数执行 - field get:字段获取 - field set...
通过以上讨论,我们不仅理解了Spring AOP的基本概念,还掌握了XML和@AspectJ两种实现方式的细节。结合提供的源码,可以进一步深入到Spring AOP的内部运作,提升我们的编程技能和问题解决能力。在实际工作中,选择...
在这个名为"aspectj-demo.zip"的压缩包中,包含了一个使用AspectJ的Java控制台项目的示例,旨在帮助开发者理解并实践AspectJ的基本用法。这个项目是在JDK 1.8环境下运行,使用了AspectJ的1.8.7版本,并且在Windows ...
《AspectJ in Action》第二版不仅详细介绍了AspectJ的基本概念和技术细节,还包含了大量实际案例和最佳实践。书中特别强调了AspectJ与Spring框架的结合使用,这在企业级应用中尤为重要。通过学习本书,读者不仅可以...
**一、AOP基本概念** AOP的核心概念有切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)和引入(Introduction)。切面是关注点的模块化,连接点是在程序执行过程中可以插入切面的特定点,如...