aop 搭配自定义注解
时间: 2023-09-02 11:12:19 浏览: 156
AOP(面向切面编程)是一种编程范式,可以通过在不修改目标对象代码的情况下,对其进行增强或拦截,实现例如日志记录、性能统计、事务管理等功能。自定义注解是Java语言中的一种元数据,可以用于在代码中添加额外的信息,例如标记某个方法需要进行权限验证、标记某个类是单例模式等。
将AOP和自定义注解搭配使用,可以更方便地实现特定功能。例如,可以使用自定义注解标记需要进行性能统计的方法,在AOP中拦截这些方法,并在方法执行前后记录方法的执行时间等信息。
具体实现步骤如下:
1. 定义自定义注解,例如:
```
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PerformanceLog {
String value() default "";
}
```
2. 定义AOP切面,例如:
```
@Aspect
@Component
public class PerformanceLogAspect {
@Around("@annotation(com.example.annotations.PerformanceLog)")
public Object performanceLog(ProceedingJoinPoint joinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
Object result = joinPoint.proceed();
long endTime = System.currentTimeMillis();
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getSimpleName();
String logMsg = "Method [" + className + "." + methodName + "] took " + (endTime - startTime) + " ms.";
System.out.println(logMsg);
return result;
}
}
```
3. 在目标方法上添加自定义注解,例如:
```
@Service
public class UserService {
@PerformanceLog("getUserById")
public User getUserById(Long id) {
//...
}
}
```
这样,在调用getUserById方法时,AOP会拦截该方法,并输出方法的执行时间等信息。
阅读全文