面向切面编程AOP
AOP(Aspect Roient Programming),面向切面编程
Aop常用术语
- 切面:就是那些重复的,公共的,通用的功能称为切面,例如日志,事务,权限。
- 连接点:就是目标方法,应为在目标风法中要实现目标方法的功能和切面功能
- 切入点(PointCut):多个连接点构成切入点,切入点可以是一个目标方法,可以是一个类中的所有方法,可以是某个包下的所有类中的方法
- 目标对象:擦送做谁,谁就是目标对象。
- 通知(Advice):来指定切入的实际,实在目标方法执行前还是执行后还是出错时,还是环绕目标方法切入切面功能。
什么是AspectJ框架
AspectJ是一个优秀面向切面的框架,它扩展了Java语言,提供了强大的切面实现,易学易用。
AspectJ常见的通知类型
- 前置通知@Before
- 后置通知@AfterReturning
- 环绕通知@Around
- 最终通知@After
- 定义切入点@Pointcut(了解)
AspectJ切入点表达式(掌握)
规范的公式
execution(访问权限 方法返回值 方法声明(参数) 异常类型)
简化后的公式(访问权限和异常声明可省)
execution(方法返回值 方法声明(参数))
用到的符号:
*代表任意个任意的字符(通配符)
..如果出现在方法的参数中,则代表任意参数
如果出现在路径中,则代表本路径及其所有的子路径
试例
execution(public * *(..)):意的公共方法
execution(* set*(..)):任何一个以set开头的方法
execution(* com.xyz.service.impl.*.*(...)):任意的返回值类型,在com.xyz.service.impl包下的任意类的任意方法的任意参数。
execution(* com.xyz.service..*.*(..)):任意的返回值类型,在com.xyz.service.及其子包下的任意方法的任意参数。
execution(* *..service.*.*(..)):service之前可以有任意子包
execution(* *.service..*.*(..)):service之前只有一个包