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 代码来实现注解逻辑
@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:环绕方法执行(可自定义逻辑)
使用自定义注解
@Service
public class UserService {@LogExecution("创建用户")public User createUser(String name) {return new User(name);}
}