Joinpoints

  连接点,通俗的讲就是想要横切的目标,这些目标包括方法(Method),构造器(Constructor),域(Field),异常(Exception),对象和类初始化(Object and class)

Pointcuts

  切点,就是定义的规则,这些规则用于匹配目标连接点,切点包括两部分advice(怎么切),expression(规则表达式)

  

//表达式格式
execution(modifiers? ret-type? declaring-type? name(param) throws?) 以上所有部分除了returning type和name以及paramter之外都是可选的,returning类型决定了匹配的方法必须要有指定的返回类型,可以使用*表示任意返回类型
只有当方法返回指定类型时,完全限定的类名才会被匹配,name匹配方法名,可以使用*匹配全部或部分方法名
parameters匹配就复杂一下:() 匹配一个无形参的方法,(..)匹配任意数量的形参方法(0~n),(*)匹配带一个任意类型的形参方法
(*,String)匹配带两个形参,第一个任意类型,第二个必须是String类型

  实例


execution(public * *(..)):任意public方法
execution(* set*(..)):方法名以set开头的任意方法
execution(* com.xyz.service.AccountService.*(..)):AccountService 接口下的任意方法 
execution(* com.xyz.service..(..)):service包下的任意方法
execution(* com.xyz.service...(..)):service包或子包下的任意方法
execution(public void MyClass.myMethod(String)) :MyClass 类的myMethod方法,方法public访问权限,void返回值,形参只有一个并为String类型
execution(void MyClass.myMethod(..)):MyClass 类的myMethod方法,任意访问权限,返回值void,任意形参
execution(* MyClass.myMethod(..)):MyClass 类的myMethod方法,任意返回值,任意形参
execution(* MyClass.myMethod*(..)):MyClass 类的以myMethod开头的方法,任意返回值,任意形参
execution(* MyClass.myMethod*(String,..)):MyClass 类的以myMethod开头的方法,任意返回值,第一个形参类型是String
execution(* *.myMethod(..)):任意类下myMethod方法 execution(MyClass.new()):任意MyClass类的无参构造器
execution(MyClass.new(..)):任意MyClass类的任意有参构造器 execution(MyClass+.new(..)):任意MyClass或其子类构造器
execution(public * com.mycompany..*.*(..)):com.mycompany包下任意子包的所有类的所有public 方法
//Spring AOP只能切方法(也就是任意连接点中的方法),AspectJ可以切任意成员(任意连接点,包括类/对象初始化块,field,方法,构造器)
within(com.xyz.service.*):service包下任意连接点
within(com.xyz.service..*):service包或子包下任意连接点
this(com.xyz.service.AccountService):AccountService接口的代理实现里的任意连接点
target(com.xyz.service.AccountService):目标对象实现了AccountService接口的任意连接点
args(java.io.Serializable):只有一个参数且参数在运行时是Serializable类型的任意连接点
@target(org.springframework.transaction.annotation.Transactional):目标对象有一个@Transactional注解任意连接点
@within(org.springframework.transaction.annotation.Transactional):目标对象的声明类型有一个@Transactional注解任意连接点
@annotation(org.springframework.transaction.annotation.Transactional):执行方法有一个@Transactional注解的任意连接点
@args(com.xyz.security.Classified):只有一个参数且参数在运行时参数有@Classified注解的任意连接点
bean(tradeService):Spring bean 名称是tradeService的任意连接点
bean(*Service):Spring bean的名称以Service结尾的任意连接点
//表达式可以使用|| && !进行组合  在XML下就是 or and not
execution(* com.xyz.myapp.service..(..)) and this(service)//xml
execution(* com.xyz.myapp.service..(..)) && this(service)//java

   

AspectJ的表达式实例的更多相关文章

  1. [原创]java WEB学习笔记105:Spring学习---AOP介绍,相关概念,使用AOP,利用 方法签名 编写 AspectJ 切入点表达式

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. SpringAOP的xml实例、注解形式实例、概念理解 以及execution表达式实例与概念说明

    (1)Spring AOP的简单应用: -->AOP:(Aspect Orinted Programming)面向切面编程,用于具有横切逻辑的场合,如:访问控制,事务管理,性能检测,由切入点和增 ...

  3. 【协议分析】Wireshark 过滤表达式实例

    Wireshark 过滤表达式实例   1.wireshark基本的语法 字符 \d          0-9的数字 \D          \d的补集(以所以字符为全集,下同),即所有非数字的字符 ...

  4. [转]EL表达式和JSTL表达式实例

    /* **Title:EL表达式和JSTL表达式实例 **Author:Insun **Blog:http://yxmhero1989.blog.163.com/ */ 为了方便写JSP,我们引入了E ...

  5. 第一个AngularJS表达式实例

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. Spring AOP AspectJ Pointcut 表达式例子

    主要来源:http://howtodoinjava.com/spring/spring-aop/writing-spring-aop-aspectj-pointcut-expressions-with ...

  7. Zabbix Trigger表达式实例

    Zabbix提供强大的触发器(Trigger)函数以方便进行更为灵活的报警及后续动作,具体触发器函数可以访问https://www.zabbix.com/documentation/2.0/manua ...

  8. Spring 基于Aspectj切面表达式

    package com.proc; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; im ...

  9. Spring 基于Aspectj切面表达式(6)

    1 package com.proc; 2 3 import org.aspectj.lang.JoinPoint; 4 import org.aspectj.lang.ProceedingJoinP ...

随机推荐

  1. MySQL数据操作语句精解

    用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句. 言外之意,就是对数据进行修改.在标准的SQL中有3个语句,它们是INS ...

  2. Golang的goroutine协程和channel通道

    一:简介 因为并发程序要考虑很多的细节,以保证对共享变量的正确访问,使得并发编程在很多情况下变得很复杂.但是Go语言在开发并发时,是比较简洁的.它通过channel来传递数据.数据竞争这个问题在gol ...

  3. CentOS下安装Docker CE教程

    一.安装前准备 1.硬件要求 CentOS 7(64-bit),内核版本不能低于3.10: CentOS 6.5(64-bit或更新的版本),内核版本为 2.6.32-431 或者更高版本,一般不建议 ...

  4. 解读Vue.use()源码

    Vue.use() vue.use()的作用: 官方文档的解释: 安装 Vue.js 插件.如果插件是一个对象,必须提供 install 方法.如果插件是一个函数,它会被作为 install 方法.i ...

  5. 第四章 信息收集之nmap

    @nmap扫描工具 nmap是使用最广泛的扫描工具,主要的使用范围有,嗅探,扫描,ping. 局域网扫描 nmap扫描的基本命令: 首先在桌面右键选择open in terminal进入命令窗口,输入 ...

  6. Unity热更新 AssetBundle

    在游戏开发中,常常需要用到热更新技术.比如:一个手机游戏开发好后,用户安装到手机上.如果此时我们要更新一个新的功能,如果没有热更新,那么需要用户卸载掉手机上的游戏,然后安装新的包,这样做十分麻烦,而且 ...

  7. python界面编程

    这是一个简单的加法计算器 首先,要先对这个简易计算器进行布局设计,需要两个输入框,还有一个输入框用于存放就算的结果,还需要两个table,一个是"+"一个是"=" ...

  8. PTA(Advanced Level)1075.PAT Judge

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  9. strCmd.Format("delete FROM userTable where name = '%s'", name);

    string.Format("select * from 数据库表 where 用户名='%s' and 密码='%s' ",m_1,m_2); 把[m_1]和[m_2]的值按照[ ...

  10. LC 200 Number of Islands

    问题描述 Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is ...