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、结果示例:

image

 

posted @ 2026-01-23 09:29  都是城市惹的祸  阅读(1)  评论(0)    收藏  举报