核心依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.7.6</version>
</dependency>
其中aspectj
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
<scope>compile</scope>
</dependency>
执行顺序
具体执行顺序因为不同aop
版本略有差异
自己测试一下比较准确.
代码
public interface Person {
void eat();
void speak();
}
public class Father {
public void sayHi(){
System.out.println("Hi im your father!");
}
}
@Component
public class Son extends Father implements Person {
@Override
public void sayHi() {
super.sayHi();
System.out.println("这是儿子的say hi");
}
@Override
public void eat() {
System.out.println("eat");
}
@Override
public void speak() {
// int i = 1 / 0;
System.out.println("speak");
}
}
@Aspect
@Component
public class TestAspect {
@Before("execution(* cn.wzy.Son.*(..))")
public void before() {
System.out.println("before");
}
@Around("execution(* cn.wzy.Son.*(..))")
public Object around(ProceedingJoinPoint joinPoint) {
System.out.println("around before");
Object object = null;
try {
object = joinPoint.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("around after");
return object;
}
@After("execution(* cn.wzy.Son.*(..))")
public void after() {
System.out.println("after");
}
@AfterReturning("execution(* cn.wzy.Son.*(..))")
public void afterReturning() {
System.out.println("afterReturning");
}
@AfterThrowing("execution(* cn.wzy.Son.*(..))")
public void afterThrowing() {
System.out.println("afterThrowing");
}
}
@Controller
@RequestMapping
public class Con {
@Autowired Son son;
@GetMapping("/get")
public void get(){
son.speak();
}
}
效果
正常
出现异常
打开
int i = 1 / 0;