以前项目中未用过aop,故一直对aop不了解,近期看了看,大致了解了下,在上代码前首先需要了解aop一些基本概念。
一、AOP基本概念
- : 1、Aspect(切面):说白了就是一个class,里面定义切入点和通知
2、JointPoint(连接点):接入点,例如方法执行、类初始化、异常处理。 在Spring AOP中,接入点始终表示方法执行。
3、Advice(增强):AOP在特定的切入点上执行的增强处理,主要包括下面几种:before,after,afterReturning,afterThrowing,around,执行顺序为:around->before->around->after->afterReturning 或 afterThrowing
4、Pointcut(切入点):用来匹配特定的接入点,增强会与切点表达式产生关联,并运行在任何切点匹配到的接入点上。说白点也就是定义触发时机。
5、AOP代理:为了实现切面功能一个对象会被AOP框架创建出来。在Spring框架中AOP代理的默认方式是:有接口,就使用基于接口的JDK动态代理,否则使用基于类的CGLIB动态代理。但是我们可以通过设置proxy-target-class=“true”,完全使用CGLIB动态代理。
二、模拟aspect advice的执行过程
- 1、手动配置
- 首先创建一个普通class,里面包含advice的几种增强处理。如图:



class创建完毕后,开始配置spring配置文件,如图:

下来测试:
运行结果:
请忽略上图中**null:0 这个,是个人实现类中的console信息 2、注解方式 - 与手动配置区别在于切面类和配置,先看切面类,需要用@Aspect标识,每个增强也是用注解标注:



配置文件:
运行结果就不展示了,和手动配置一致
通过上面执行结果可以看出Advice(增强)的运行过程:
此外需要注意afterReturning中指定的返回值,其实接受的是arround中的返回值。如果需要对返回结果进行修改,需要在arround中进行操作。
版权声明:本文为xm503721原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。