AspectJ切点表达式

@AspectJ 支持三种通配符

* 匹配任意字符,只匹配一个元素

.. 匹配任意字符,可以匹配多个元素 ,在表示类时,必须和 * 联合使用

+ 表示按照类型匹配指定类的所有类,必须跟在类名后面,如 com.cad.Car+ ,表示继承该类的所有子类包括本身

逻辑运算符

切点表达式由切点函数组成,切点函数之间还可以进行逻辑运算,组成复合切点。

  • &&:与操作符。相当于切点的交集运算。xml配置文件中使用切点表达式,&是特殊字符,所以需要转义字符&来表示。

  • ||:或操作符。相当于切点的并集运算。

  • !:非操作符,相当于切点的反集运算。

Spring 支持 9 个 @AspectJ 切点表达式函数,它们用不同的方式描述目标类的连接点。我们来了解几个常用的

execution()

execution() 是最常用的切点函数,用来匹配方法

语法:
execution(<修饰符><返回类型><包.类.方法(参数)><异常>) 
修饰符和异常可以省略。
使用例子
  • execution(public * *(..)) :匹配目标类的所有public方法,第一个*代表返回类型,第二个*代表方法名,..代表方法的参数。

  • execution(**User(..)) :匹配目标类所有以User为后缀的方法。第一个*代表返回类型,*User代表以User为后缀的方法

  • execution(* com.cad.demo.User.*(..)) :匹配 User 类里的所有方法

  • execution(* com.cad.demo.User+.*(..)) :匹配该类的子类包括该类的所有方法

  • execution(* com.cad.*.*(..)) :匹配 com.cad 包下的所有类的所有方法

  • execution(* com.cad..*.*(..)) :匹配 com.cad 包下、子孙包下所有类的所有方法

  • execution(* addUser(Spring, int)) :匹配 addUser 方法,且第一个参数类型是 String,第二个参数类型是 int

args()

args()函数接受一个类名,表示目标类方法参数是指定类时(包含子类),则匹配切点。

args(com.cad.User) :匹配 addUser(User user) 方法等

within()

匹配类

语法:
within(<类>)

within(com.cad.User) :匹配 User 类下的所有方法

target()

target()函数通过判断目标类是否按类型匹配指定类决定连接点是否匹配。

target(com.cad.User) :如果目标类类型是 User 类那么目标类所有方法都匹配切点。

this()

this()函数判断代理对象的类是否按类型匹配指定类。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,359评论 19 139
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,107评论 0 3
  • 抬头看 蓝天 白云 带来好心情 白云 蓝天 空气好清新 好天气 给你快乐 你有没有爱上我 轰隆隆 刮风 闪电 天空...
    林梦夕1987阅读 1,365评论 0 0
  • 这两天待业家中挺闲的,想起了大学出去玩过的地方,位于山西平定县的娘子关。地道的绿皮小火车,一定要做最早的那班,又原...
    半理阅读 2,286评论 0 1
  • 6月24日 星期日 晴 闺女从早上起来,洗刷完,吃完早饭,忙活了一上午,复习功课、听写生字、补上了没...
    宝贝亲子成长日记阅读 2,224评论 2 3