基于@AspectJ和schema的aop(二)[email protected]基础语法

  @AspectJ使用jdk5.0和正规的AspectJ切点表达式描述切面, 由于spring只支持方法的连接点,所以Spring只支持部分AspectJ的切点语言.

1.切点表达式函数

  AspectJ 5的切点表达式有关键字和操作参数组成,如execution(* greetTo(..))的切点表达式, execution为关键字, "* greetTo(..)"为操作参数.在这里execution表示目标类执行某一方法, 而"* greetTo(..)"描述目标方法的匹配模式, 两者联合起来表示目标类greetTo()方法的连接点.为了描述方便, 将execution()称作为函数, 而将匹配串"* greetTo(..)"称为函数的入参.

  Spring支持9个@AspectJ切点表达式函数, 它们用不同的方式描述目标类的连接点.根据描述对象的不同, 可以大致分为4种类型.

  • 方法切点函数: 通过描述目标类方法信息定义连接点
  • 方法入参切点函数: 通过描述目标类方法的入参信息定义连接点
  • 目标类切点函数: 通过描述目标类类型信息定义连接点
  • 代理类切点函数: 通过描述目标类的代理类的信息定义连接点.

这四种类型的切点函数, 通过下表进行详细说明:

类别 函数 入参 说明
方法切点函数 execution() 方法匹配模式 表示满足某一模式的所有目标类方法连接点, 如execution(* greetTo(..))表示所有目标类中的greetTo()方法
@annotation() 方法注解类名 表示标注了特定注解的目标方法连接点, 如@annotation(com.bao.bao.aop.NeedTest)表示任何标注了@NeedTest注解的目标类方法
方法入参切点函数 args() 类名 通过判断目标类方法运行时入参对象的类型定义指定连接点.如args(com.bao.bao.Waiter)表示所有有且仅有一个按类型匹配于Waiter入参的方法
@args() 类型注解类名 通过判断目标方法运行时入参对象的类型是否标注特定注解来指定连接点, 如@args(com.bao.bao.Monitorable)表示任何这样的一个目标方法, 它有一个入参且入参对象的类标注了@Monitorable注解
目标类切点函数 within() 类名匹配器 表示特定域下的所有连接点.如within(co.bao.bao.service.*)表示com.bao.bao.service包中的所有连接点.即包中所有的类的所有方法, 而within(com.bao.bao.service.*Service)表示在com.bao.bao.
代理类切点函数      
时间: 2024-12-26 01:04:44

基于@AspectJ和schema的aop(二)[email protected]基础语法的相关文章

基于@AspectJ和schema的aop(四)[email protected]进阶

@AspectJ可以使用切点函数定义切点, 我们还可以使用逻辑运算对切点进行复合运算得到复合的切点. 我们还可以对切点进行命名, 从而可以复用切点.当一个连接点匹配多个切点时, 需要考虑增强织入的顺序.还有一个在前面提到过的问题就是, 如何访问在增强中访问连接点上下文信息.下面对这几方面进行学习. 1.对切点进行复合运算 使用切点进行复合运算, 使得我们能够拥有强大的表达切点的能力.例子如下: package com.bao.bao.aspectj; import org.aspectj.lan

基于@AspectJ和schema的aop(一)

在前面我们使用Pointcut和Advice描述切点和增强, 并使用Advisor整合两者描述切面[email protected]使用注解来描述切点和增强.两者使用的方式不同, 但是在本质上都是一样的. 我们还是用以前的例子来举例, 学习如何使用@AspectJ来描述切点和增强.首先看一个简单的例子. package com.bao.bao.aspectj; /** * Created by xinfengyao on 16-10-23. */ public interface Waiter

基于@AspectJ和schema的aop(三)---切点函数详解

切点函数是AspectJ表达式语言的核心, 也是使用@AspectJ进行切面定义的难点.本小节我们通过具体的实例对切点函数进行深入学习. [email protected]() @annotation()表示标注了某个注解的所有方法,这个比较简单. 2.execution() execution()是最常使用的切点函数,其语法如下: execution(<修饰符模式>? <返回类型模式> <方法名模式> (<参数模式>) <异常模式>?) 除了返

Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一个简单的实现四则运算的计算器. 加入AOP功能:日志功能:检测参数中是否有负数的功能. 废话不多说了,直接上代码: (一)基于XML配置: 定义了一个接口类: package com.edu.aop; public interface ArithmeticCalculator { int add(i

小曹学spring--基于@AspectJ和Schema的AOP

前言: 上一章中已经介绍,Spring中定义一个切面是比较麻烦的,需要实现专门的接口,并进行一些较为复杂的配置.经过改进,如今Spring AOP已经焕然一新,用户可以使用@AspectJ注解非常容易的定义一个切面,而不需要实现任何接口. 对于jdk5.0以下的项目,则可以通过基于Schema的配置定义切面 1.Spring对AOP的支持 spring2.0以后对AOP功能进行了重要的增强,主要变现在以下几个方面: 新增了基于Schema的配置支持,为AOP提供了专门的aop命名空间: 新增了对

scala函数式编程(二) scala基础语法介绍

上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些java或者python的基础,毕竟大部分人不会将scala当作第一门学习编程的语言. 不过这些语法知识记不住也没关系,本身语法这种东西就应该在使用中被记住.这里写这篇的目的也只是梳理一遍,方便大家对语法有个初步的印象,后面可以随时查询. PS:所使用的版本是scala 2.11.8,那我们开始吧 一.

【[email&#160;protected]基础篇 ~】# 磁盘与文件系统

之前三篇文章我们简单介绍了Linux系统的用户管理,文件操作等,都是比较浅显的基本操作.这节我们要深入一下了,从文件系统我们要看到磁盘系统.从磁盘系统我们要看到操作系统的整体架构.废话不多少让我们开始学习吧! 磁盘与文件系统 1.磁盘系统 1.1 磁盘结构 如图所示,磁盘由扇区和柱面组成,分区的最小单位是柱面(柱是有厚度的,本图是截面图),磁盘读取的最小单位是扇区.第一扇区的MBR(446bytes)分区表可以最大包含四个分区(64bytes)的信息,即从开始柱面到结束柱面4组数据,每组16个字

【[email&#160;protected]基础篇 ~】# 用户管理

经过前两篇文章的洗礼,相信大家对Linux的基本操作已有了大致的了解,今天我们来讲解一下Linux的用户管理,大家最熟悉的可能还是root用户,就是超级管理员么,具有神的权限.但是很多情况下,为了给其他用户登录和操作系统,我们需要创建其他非管理员用户并给他们分配一定的权限,以确保系统在多用户的情况下系统安全.那现在我们就开始学习吧,stay hungary, stay foolish! 用户管理 1.新建用户 1.1 创建一个普通账户 新建用户主要用useradd这个命令 [[email pro

【[email&#160;protected]基础篇 ~】# 文件管理

上一篇我们讲了vi编辑器,是不是很嗨,还有意犹未尽的干脚,vi编辑器确实功能强大无比,话说把linux作为开发平台也是很不错的选择.神啊,早点让我强大起来吧!千里之行始于足下,我们还是步步为营,今天我们讲解一下常用的文件操作命令,就如同windows的资源管理器.对于一个命令高手,在linux中操作绝对比你用资源管理器快n倍,你信不?等成为大牛了你就体会到了,哈哈~   文件管理 1.目录操作 1.1 创建目录 [[email protected] ~]# mkdir contentName 1