今天重点在事务
- AspectJ对AOP的实现
对于AOP这种编程思想,很多框架都进行了实现。Spring就是其中之一,可 以完成面向切面编程。然而,AspectJ也实现了AOP的功能,且其实现方式更为简捷, 使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ的对于AOP的实 现也引入到了自己的框架中。
在Spring中使用AOP开发时,一般使用AspectJ的实现方式。
- AspectJ的通知类型
AspectJ中常用的通知有五种类型:
前置通知
后置通知
环绕通知
异常通知
最终通知:无论程序执行是否正常,该通知都会执行。类似于 try..catch中finally代码块。
- AspectJ的切入点表达式
![49e64a929388f494eb19b19c99d4d984.png](https://img-blog.csdnimg.cn/img_convert/49e64a929388f494eb19b19c99d4d984.png)
切入点表达式要匹配的对象就是目标方法的方法名。所以,execution表达式中明显就是方法 的签名。注意,表达式中加[ ]的部分表示可省略部分,各部分间用空格分开。在其中可以使 用以下符号:
![089602299bc57d61b30469a0c4ecc55a.png](https://img-blog.csdnimg.cn/img_convert/089602299bc57d61b30469a0c4ecc55a.png)
11. AspectJ的切入点表达式
举例:
execution(public * *(..)) 指定切入点为:任意公共方法。
execution(* set *(..)) 指定切入点为:任何一个以“set”开始的方法。
execution(* com.xyz.service.*.*(..)) 指定切入点为:定义在service包里的任意类的任意方法。 execution(* com.xyz.service..*.*(..)) 指定切入点为:定义在service包或者子包里的任意类的任意方法。“..”出现在类名中时, 后面必须跟“*”,表示包、子包下的所有类。
execution(* *.service.*.*(..)) 指定只有一级包下的serivce子包下所有类(接口)中的所有方法为切入点
execution(* *..service.*.*(..)) 指定所有包下的serivce子包下所有类(接口)中的所有方法为切入点
12.搭建AspectJ的开发环境
12.1 导入两个Jar包
![983ad70c1d8a8ebd427d7179acdfd031.png](https://img-blog.csdnimg.cn/img_convert/983ad70c1d8a8ebd427d7179acdfd031.png)
12.2 引入AOP约束
![548a3a64abf61b5ed5e593186e86270f.png](https://img-blog.csdnimg.cn/img_convert/548a3a64abf61b5ed5e593186e86270f.png)
- AspectJ对于AOP的实现有两种方式: 注解方式 XML方式
- 注解方式