1.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yl</groupId>
<artifactId>aop</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>aop</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入aop依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.service
package com.yl.aop.service;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public String getUserById(Integer id) {
System.out.println("getUserById() running");
return "小蓝";
}
}
3. 新建一个切面类,通过表达式配置切入点,增加几种通知方式
package com.yl.aop.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class LogAspect {
@Pointcut("execution(* com.yl.aop.service.*.*(..))")
public void pc1() {
}
@Before("pc1()")
public void before(JoinPoint joinPoint) {
String name = joinPoint.getSignature().getName();
System.out.println(name + "方法开始执行了");
}
@After("pc1()")
public void after(JoinPoint joinPoint) {
String name = joinPoint.getSignature().getName();
System.out.println(name + "方法执行结束了");
}
@AfterReturning(value = "pc1()",returning = "s")
public void afterRunning(JoinPoint joinPoint,String s) {
String name = joinPoint.getSignature().getName();
System.out.println(name + "方法的返回值是"+s);
}
@AfterThrowing(value = "pc1()",throwing = "e")
public void afterThrowing(JoinPoint joinPoint,Exception e) {
String name = joinPoint.getSignature().getName();
System.out.println(name + "方法抛出了异常"+e.getMessage());
}
@Around("pc1()")
public Object arround(ProceedingJoinPoint proceedingJoinPoint){
try {
System.out.println("around start.....");
Object proceed = proceedingJoinPoint.proceed();
System.out.println("around end ......");
return proceed;
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return null;
}
}
4.测试
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3ffb70f25300a744339af7cf008ca19b.png)
5.结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/58bb01a7b1ec77a293208063a3a4cde0.png)