springboot写一个添加aop日志的自定义注解实例(入门)

以下是一个使用Spring Boot编写的自定义注解示例,用于添加AOP日志功能:

创建一个自定义注解 Loggable,用于标记需要添加AOP日志的方法。
java Copy code
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
}
创建一个切面类 LoggingAspect,用于在被 Loggable 注解标记的方法执行前后添加日志记录。
java Copy code
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.AfterReturning;
import org.springframework.stereotype.Component;

import java.util.logging.Logger;

@Aspect
@Component
public class LoggingAspect {

    private Logger logger = Logger.getLogger(LoggingAspect.class.getName());

    @Before("@annotation(com.example.Loggable)")
    public void logMethodExecution(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        logger.info("Executing method: " + methodName);
    }

    @AfterReturning(pointcut = "@annotation(com.example.Loggable)", returning = "result")
    public void logMethodReturnValue(JoinPoint joinPoint, Object result) {
        String methodName = joinPoint.getSignature().getName();
        logger.info("Method " + methodName + " returned: " + result);
    }
}
在需要添加日志的方法上添加 @Loggable 注解。
java Copy code
@Service
public class ExampleService {

    @Loggable
    public void doSomething() {
        // Method implementation
    }

    @Loggable
    public String calculateResult(int a, int b) {
        // Method implementation
        return "Result";
    }
}
在上述示例中,我们创建了一个切面类 LoggingAspect,通过 @Before 和 @AfterReturning 注解来定义在被 Loggable 注解标记的方法执行前后要执行的逻辑。切面类会记录方法的名称,并使用Java日志进行输出。

在 ExampleService 类中,我们在 doSomething 和 calculateResult 方法上添加了 @Loggable 注解,这样就会触发切面类中定义的日志记录逻辑。

当调用被 @Loggable 注解标记的方法时,将会在控制台输出相关的日志信息,包括方法的名称和返回值(在返回类型不为 void 的情况下)。

你可以根据实际需求扩展该示例,并在切面类中添加自己所需要的日志记录逻辑。

注解 @Before("@annotation(com.example.Loggable)") 是切面类中的一个方法级别的切点表达式,它被用于定义在被 Loggable 注解标记的方法执行前执行的逻辑。

具体解释如下:

@Before: 这是一个 AspectJ 切面注解,表示该方法将在目标方法执行之前执行。
"@annotation(com.example.Loggable)": 这是切点表达式,指定了要拦截的目标方法。其中,@annotation() 用于匹配带有特定注解的方法,而 com.example.Loggable 是我们自定义的注解类。
因此,当使用 @Before("@annotation(com.example.Loggable)") 注解一个方法时,这个方法就会在所有被 Loggable 注解标记的方法执行之前执行。在该方法内部,你可以编写相应的代码,实现自定义的日志记录逻辑或其他操作。

总结起来,@Before("@annotation(com.example.Loggable)") 注解告诉AOP框架,在被 Loggable 注解标记的方法执行前,执行当前方法的逻辑。

相关推荐

  1. springboot aop 定义注解形式

    2023-12-16 21:28:03       35 阅读
  2. 基于AOP实现定义注解

    2023-12-16 21:28:03       15 阅读
  3. 定义注解+AOP实现日志记录

    2023-12-16 21:28:03       13 阅读
  4. gin定义

    2023-12-16 21:28:03       46 阅读
  5. SpringBoot使用定义注解AOP实现API接口日志记录

    2023-12-16 21:28:03       43 阅读
  6. Springboot定义注解+aop实现redis自动清除缓存功能

    2023-12-16 21:28:03       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 21:28:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 21:28:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 21:28:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 21:28:03       20 阅读

热门阅读

  1. 2276. 统计区间中的整数数目

    2023-12-16 21:28:03       38 阅读
  2. C++改写为C

    2023-12-16 21:28:03       39 阅读
  3. JVM源码剖析之信号处理机制

    2023-12-16 21:28:03       24 阅读
  4. Ubuntu 命令行安装 Clang 16或者Clang 17的过程

    2023-12-16 21:28:03       38 阅读
  5. js-正则表达式

    2023-12-16 21:28:03       25 阅读
  6. 学习软件测试建议看些什么书?

    2023-12-16 21:28:03       31 阅读
  7. Ceph入门到精通-Ceph Pacific 版本磁盘预测模块

    2023-12-16 21:28:03       30 阅读