<?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>
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 "小蓝";
}
}
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 {
/** * 配置切入点,运用表达式 * 以下表达式,第一个*代表方法的返回值是任意的, * 其下那段意思是扫描com.yl.sop.service包下的所有的类中的所有的方法,方法的参数任意。 */
@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;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_41359273/article/details/120464910
内容来源于网络,如有侵权,请联系作者删除!