Использование аннотаций (Annotations) для улучшения читаемости и обработки кода
Создание аннотации для измерения времени выполнения метода в Java:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogExecutionTime {
}Данная аннотация @LogExecutionTime позволяет отмечать методы в Java классах, чтобы измерять время выполнения этих методов. Для использования аннотации, следует применить ее к методу, который необходимо измерить:
public class ExampleClass {
@LogExecutionTime
public void performTimeConsumingTask() {
// Выполняем длительную задачу для измерения времени
}
}Теперь, можно создать аспект (Aspect) с использованием библиотеки AspectJ или Spring AOP для обработки методов, помеченных аннотацией @LogExecutionTime, и измерить время их выполнения:
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.ProceedingJoinPoint;
@Aspect
public class LogExecutionTimeAspect {
@Pointcut("@annotation(LogExecutionTime)")
public void logExecutionTime() {
}
@Around("logExecutionTime()")
public Object logTime(ProceedingJoinPoint joinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
Object proceed = joinPoint.proceed();
long executionTime = System.currentTimeMillis() - startTime;
System.out.println(joinPoint.getSignature() + " выполнен за " + executionTime + "ms");
return proceed;
}
}Аспект LogExecutionTimeAspect создает возможность измерить время выполнения методов, помеченных аннотацией @LogExecutionTime, путем перехвата вызова метода и расчета времени выполнения. Это может быть очень полезным для оптимизации производительности и анализа кода.