Новое в Spring и программировании AOP. Работа над весенним учебным пособием AOP для написания аспектов, которые перехватывают вызовы методов Хотелось бы включить ведение журнала времени.
В соответствии с инструкциями из учебника я создал пользовательскую аннотацию для ведения журнала и аспект, определяющий, что следует делать при вызове этой аннотации.
Код ниже является аннотацией TrackTime:
package com.in28minutes.springboot.tutorial.basics.example.aop;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TrackTime {}
Однако Eclipse отображает ошибки -
«Элемент не может быть преобразован как переменная / сохранение не может быть преобразовано в переменную»
Затем я создал аспект с именем MethodExecutionCalculationAspect с аннотацией «TrackTime».
@Around("@annotation(com.in28minutes.springboot.tutorial.
basics.example.aop.TrackTime)")
MethodExecutionCalculationAspect
package com.in28minutes.springboot.tutorial.basics.example.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
@Aspect
@Configuration
public class MethodExecutionCalculationAspect {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Around("@annotation
(com.in28minutes.springboot.tutorial.basics.example.aop.TrackTime)")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
joinPoint.proceed();
long timeTaken = System.currentTimeMillis() - startTime;
logger.info("Time Taken by {} is {}", joinPoint, timeTaken);
}
}
@ Around использует совет вокруг. Он перехватывает вызов метода и использует joinPoint.proceed () для выполнения метода.
@annotation (com.in28minutes.springboot.tutorial.basics.example.aop.TrackTime) - это точка для определения перехвата на основе аннотации - @annotation
сопровождается полным именем типа аннотации.
Как только я исправлю аннотацию и совет, я надеюсь использовать аннотацию для методов отслеживания времени. как показано ниже:
@Service
public class Business1 {
@TrackTime
public String calculateSomething(){
Любая помощь будет оценена.
Информация о проекте следующая:
SpringBootTutorialBasicsAplication.java:
Класс приложения Spring Boot, созданный с помощью Spring Initializer. Этот класс действует как точка запуска приложения.
• pom.xml: содержит все зависимости, необходимые для построения этого проекта с использованием Spring Boot Starter AOP.
• Business1.java, Business2.java, Dao1.java, Dao2.java: Бизнес-классы зависят от классов DAO.
• Мы напишем аспекты для перехвата вызовов в эти бизнес-классы и классы DAO.
• AfterAopAspect.java: Реализует несколько советов после.
• UserAccessAspect.java: Реализует рекомендацию «Перед» для проверки доступа.
• BusinessAopSpringBootTest.java: модульный тест, который вызывает бизнес-методы.
• Maven 3.0+ - ваш инструмент для сборки
• Затмение.
• JDK 1.8 +