
org.springframework.boot
spring-boot-starter-aop
其他任何包 任何动作都可以不用做了. 默认开启了AOP;
定义个AspectJ 类 我们顺便顺一下基础知识; 然后开始往深处介绍里面具体的执行流程;
package com.huf.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
/**
• auth:huf
*/
@Aspect
@Component
public class HufAop {
“代表着一个切点; 该方法不会进入;仅仅是一个切点;”
@Pointcut(“execution(public * com.huf.service.impl..(..))”)
public void testPoincut(){}
“执行目标对象方法之前执行;但是位于环绕通知之后”
@Before(“testPoincut()”)
public void testBefore(){
System.out.println(“Aop testBefore————>”);
}
“环绕通知 执行目标方法的 最前面(第一位) 环绕后也是也是最后一个执行;”
@Around(“testPoincut()”)
public void testAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

System.out.println(“环绕通知前————>”);
proceedingJoinPoint.proceed();
System.out.println(“环绕通知后————>”);
}
“执行目标方法之后;在环绕后之前”
@After(“testPoincut()”)
public void testAfter(){
System.out.println(“Aop testAfter————>”);
}
“在目标方法之后执行 returning 然后执行after”
@AfterReturning(“testPoincut()”)
public void testAfterReturning(){
System.out.println(“Aop testAfterReturning————>”);
}
“在目标方法抛出异常之后执行.然后不会执行环绕后. 直接执行AfterThrowing
然后执行after”
@AfterThrowing(“testPoincut()”)
public void testAfterThrowing(){
System.out.println(“Aop testAfterThrowing————>”);
}
}
这里我们就有总结: 以下是我运行的结果 :不报错的运行结果

在这里插入图片描述
报错的运行结果:
在这里插入图片描述
因此 我们得出一个结论;
Around
环绕通知 通知前 一定是最先执行的 在目标方法不报错的情况下
通知后一定是最后执行的;
Before

目标对象方法前执行 该方法处于Around 的之后; 目标对象方法之前;
target
proceedingJoinPoint.proceed(); 被代理方法永远在Around 与Before 方法之后执行;
AfterReturning(一)
从名字就可以看出来 只要方法不出异常. 那么 AfterReurning 在代理方法之后执行;
AfterThrowing(二)
从名字就可以看出来 只要方法抛出异常 那么就会执行该方法;同时 AfterReturning 与
AfterThrowing 只有一个会执行. 因为代理方法执行下来只会有两种情况
第一种情况就是完全执行完毕 第二种就是 中途抛了异常 抛了异常之后 AfterReturning 与
Around的换绕后 都不会执行;
After
不管目标方法是否出现异常 都会执行After;
Around (三)
环绕通知之后执行;
总结: 正常情况下:只要出现 那么一定执行 只要出现二 那么 一定不会执行;
======================================================================
======================================
尽管这样记忆 会有问题所在. 如果钻牛角尖的 那么就会有N种情况.
这样我们就得出了以下这个结论图;
#mermaid-svg-0I01m9jzSQDw4YUL .label{font-family:‘trebuchet ms’, verdana, arial;font-
family:var(–mermaid-font-family);fill:#333;color:#333}#mermaid-svg-
0I01m9jzSQDw4YUL .label text{fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL .node
rect,#mermaid-svg-0I01m9jzSQDw4YUL .node circle,#mermaid-svg-0I01m9jzSQDw4YUL
.node ellipse,#mermaid-svg-0I01m9jzSQDw4YUL .node polygon,#mermaid-svg-
0I01m9jzSQDw4YUL .node path{fill:#ECECFF;stroke:#9370db;stroke-

width:1px}#mermaid-svg-0I01m9jzSQDw4YUL .node .label{text-
align:center;fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL
.node.clickable{cursor:pointer}#mermaid-svg-0I01m9jzSQDw4YUL
.arrowheadPath{fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL .edgePath
.path{stroke:#333;stroke-width:1.5px}#mermaid-svg-0I01m9jzSQDw4YUL .flowchart-
link{stroke:#333;fill:none}#mermaid-svg-0I01m9jzSQDw4YUL .edgeLabel{background-
color:#e8e8e8;text-align:center}#mermaid-svg-0I01m9jzSQDw4YUL .edgeLabel
rect{opacity:0.9}#mermaid-svg-0I01m9jzSQDw4YUL .edgeLabel
span{color:#333}#mermaid-svg-0I01m9jzSQDw4YUL .cluster
rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-0I01m9jzSQDw4YUL .cluster
text{fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL
div.mermaidTooltip{position:absolute;text-align:center;max-
width:200px;padding:2px;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–
mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-
radius:2px;pointer-events:none;z-index:100}#mermaid-svg-0I01m9jzSQDw4YUL
.actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-0I01m9jzSQDw4YUL
text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-0I01m9jzSQDw4YUL .actor-
line{stroke:grey}#mermaid-svg-0I01m9jzSQDw4YUL .messageLine0{stroke-
width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-0I01m9jzSQDw4YUL
.messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-
0I01m9jzSQDw4YUL #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-
0I01m9jzSQDw4YUL .sequenceNumber{fill:#fff}#mermaid-svg-0I01m9jzSQDw4YUL
#sequencenumber{fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL #crosshead
path{fill:#333;stroke:#333}#mermaid-svg-0I01m9jzSQDw4YUL
.messageText{fill:#333;stroke:#333}#mermaid-svg-0I01m9jzSQDw4YUL
.labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-0I01m9jzSQDw4YUL
.labelText,#mermaid-svg-0I01m9jzSQDw4YUL
.labelText>tspan{fill:#000;stroke:none}#mermaid-svg-0I01m9jzSQDw4YUL
.loopText,#mermaid-svg-0I01m9jzSQDw4YUL
.loopText>tspan{fill:#000;stroke:none}#mermaid-svg-0I01m9jzSQDw4YUL
.loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-
0I01m9jzSQDw4YUL .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-0I01m9jzSQDw4YUL
.noteText,#mermaid-svg-0I01m9jzSQDw4YUL
.noteText>tspan{fill:#000;stroke:none}#mermaid-svg-0I01m9jzSQDw4YUL
.activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-0I01m9jzSQDw4YUL
.activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-0I01m9jzSQDw4YUL
.activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-0I01m9jzSQDw4YUL .mermaid-main-
font{font-family:“trebuchet ms”, verdana, arial;font-family:var(–mermaid-font-
family)}#mermaid-svg-0I01m9jzSQDw4YUL .section{stroke:none;opacity:0.2}#mermaid-
svg-0I01m9jzSQDw4YUL .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-
0I01m9jzSQDw4YUL .section2{fill:#fff400}#mermaid-svg-0I01m9jzSQDw4YUL
.section1,#mermaid-svg-0I01m9jzSQDw4YUL .section3{fill:#fff;opacity:0.2}#mermaid-svg-
0I01m9jzSQDw4YUL .sectionTitle0{fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL
.sectionTitle1{fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL
.sectionTitle2{fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL
.sectionTitle3{fill:#333}#mermaid-svg-0I01m9jzSQDw4YUL .sectionTitle{text-