java中自定义注解

文章目录

自定义一个注解

java 复制代码
// 元注解:定义注解的行为
@Retention(RetentionPolicy.RUNTIME) // 注解在运行时保留,可通过反射读取
@Target(ElementType.METHOD)        // 注解只能用于方法上
public @interface LogExecution {
    String value() default "Method executed"; // 成员变量(带默认值)
}

注解要做的逻辑

如果你不是 spring web 项目,你可能需要手动实现注解的处理逻辑

如果你是 spring 的 web 项目,其中一半会引入 spring-boot-starter-aop 依赖,其中含有 aspect 相关注解使用,因此你可以使用 aop 代码来实现注解逻辑

java 复制代码
@Aspect
@Component
public class LoggingAspect {
    @Around("@annotation(logExecution)") // 匹配带有 @LogExecution 的方法
    public Object logExecutionTime(ProceedingJoinPoint joinPoint, LogExecution logExecution) throws Throwable {
        long start = System.currentTimeMillis();

        // 执行目标方法
        Object result = joinPoint.proceed();

        long duration = System.currentTimeMillis() - start;
        System.out.println("【日志】" + logExecution.value() + ",耗时: " + duration + "ms");
        return result;
    }
}
  • @Before:方法执行前。
  • @After:方法执行后。
  • @AfterReturning:方法成功返回后。
  • @AfterThrowing:方法抛出异常后。
  • @Around:环绕方法执行(可自定义逻辑)

使用自定义注解

java 复制代码
@Service
public class UserService {
    @LogExecution("创建用户")
    public User createUser(String name) {
        return new User(name);
    }
}
相关推荐
JH30734 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_5 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble5 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟5 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖5 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_12498707537 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_7 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.7 小时前
Day06——权限认证-项目集成
java
瑶山7 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy7 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法