Spring AOP面向切面编程简介
1、pom引入aop
<!-- 父工程:Spring Boot 2.7.18 核心依赖管理 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> <!-- 优先从仓库拉取,不从本地找 --> </parent> <dependencies> <!-- Spring Boot Web 核心依赖(包含Tomcat、Spring MVC等) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 。。。。。
2、定义注解
import java.lang.annotation.*; @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface NsyLog { public String controllerName() default ""; public String methodName() default ""; }
3、aop实现
import xxx.NsyLog; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; @Aspect @Component @Slf4j public class NsyAspect { @Before(value = "@annotation(controllerLog)") public void doBefore(JoinPoint joinPoint, NsyLog controllerLog) throws Throwable { log.info("before => {}.{}", controllerLog.controllerName(), controllerLog.methodName()); } @AfterReturning(value = "@annotation(controllerLog)") public void doAfter(JoinPoint joinPoint, NsyLog controllerLog) throws Throwable { log.info("after => {}.{}", controllerLog.controllerName(), controllerLog.methodName()); } }
4、控制器引用注解
import xxx.NsyLog; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/nsy") @Api("nsy") @Slf4j public class NsyController { @NsyLog(controllerName = "NsyController", methodName = "demo") @GetMapping("demo") @ApiOperation("demo") public ResponseEntity<?> demo() { log.info("demo"); return ResponseEntity.ok("<UNK>"); } }
5、结果示例:

有些事情,没经历过不知道原理,没失败过不明白奥妙,没痛苦过不了解真谛。临渊羡鱼,不如退而结网!

浙公网安备 33010602011771号