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);
    }
}
相关推荐
吃杠碰小鸡26 分钟前
VsCode中开发Java项目
java·vscode
宠友信息1 小时前
内容社区源码开发实践解析,用Spring Boot打造1:1仿小红书源码平台
java·spring boot·redis·websocket·mysql·spring·uni-app
行百里er1 小时前
加个依赖就生效?一行搞定 Spring Boot Starter 自动装配
java·后端·监控
月华路1 小时前
G1 新生代对象晋升老年代:实现机制与 GC 日志
java·jvm·算法
AI人工智能+电脑小能手2 小时前
大白话说Java设计模式-34-命令模式(业务实战篇)
java·spring·设计模式·命令模式·异步任务·撤销重做·事务封装
净重21克2 小时前
万字长文!TLS协议升级避坑手册:JDK老项目适配TLS1.2/1.3全流程拆解
java·springboot·java安全
一直C2 小时前
【数据结构】哈希表+算法复杂度与经典排序查找(C语言)
java·linux·开发语言·数据结构·算法·ubuntu·散列表
paopaokaka_luck2 小时前
基于springboot3+vue3的车间生产管理系统(Echarts图形化分析、BI报表)
java·前端·spring boot·学习·echarts
Zane19942 小时前
遍历时删元素为什么报错:modCount 这个"计数器"在背后盯着你
java·后端
电商API_180079052473 小时前
速卖通商品采集API技术文章
java·开发语言·c++·api·跨境电商·商品详情