Я попытался создать пользовательскую аннотацию для времени выполнения метода протоколирования, и она работает нормально, пока я не использую аннотацию для метода, которого нет в классе контроллера.При использовании в классе контроллера автоматическое подключение другого класса (класса обслуживания) завершается неудачно и выдает исключение Null Pointer.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}
-
@Aspect
@Component
public class ExampleAspect {
@Around("@annotation(LogExecutionTime)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object proceed = joinPoint.proceed();
long executionTime = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms");
return proceed;
}
}
Когда я использую эту аннотацию в любом классе, кроме моего контроллера, он работает нормально.
@RestController
public class ProjectController {
@Autowired
ProjectService projectService;
@GetMapping("/testTimeTaken")
@LogExecutionTime
private String testTimeTaken() {
return projectService.dummyMethod();
}
}