一、Spring AOP
1.概念
先说一个业务场景:
有一个请求过来,一共有5个对象12345,其中135需要执行保存日志的操作。其中1是在请求进来之前就要记录日志,3是请求执行中记录日志,5是请求结束后记录日志。
- 通知(Advice):定义了“做什么”和“什么时候做”,即什么时候执行保存日志的操作,这就是通知
- 连接点:哪些对象可以执行通知。因为我们135都有记录日志的需求,所以135都是连接点
- 切点:在哪个对象上执行通知,那个对象就是切点。比如请求刚进来,35是有资格执行的,但是还没走到他们那里,所以35是连接点,而正好走到1这里了,所以1是切点
- 切点 + 通知:谁在什么时候做什么操作
- 切面:切面 = 切点 + 通知,谁在什么时候做什么操作
- 织入:原本的请求只是走一个正常流程,现在1需要在原本的基础上再额外做一个记录日志的操作,所以在原本基础上生成一个代理对象,代理对象中添加记录日志的功能。这个过程就是织入
关于通知里的什么时候做,aop里有以下几种时间:
前置通知(@Before):在目标方法调用之前调用通知
后置通知(@After):在目标方法完成之后调用通知
环绕通知