diff --git a/spring-boot-mvc/pom.xml b/spring-boot-mvc/pom.xml
index fee725847f..a414ed7bb2 100644
--- a/spring-boot-mvc/pom.xml
+++ b/spring-boot-mvc/pom.xml
@@ -89,6 +89,18 @@
provided
+
+
+ org.aspectj
+ aspectjrt
+ 1.9.1
+
+
+ org.aspectj
+ aspectjweaver
+ 1.9.1
+
+
diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java b/spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java
new file mode 100644
index 0000000000..534a2ba333
--- /dev/null
+++ b/spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java
@@ -0,0 +1,32 @@
+package com.baeldung.annotations;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Logger;
+
+@Aspect
+@Component
+public class PerformanceAspect {
+
+ private static Logger logger = Logger.getLogger(PerformanceAspect.class.getName());
+
+ @Pointcut("within(@org.springframework.stereotype.Repository *)")
+ public void repositoryClassMethods() {
+ }
+
+ @Around("repositoryClassMethods()")
+ public Object measureMethodExecutionTime(ProceedingJoinPoint pjp) throws Throwable {
+ long start = System.nanoTime();
+ Object retval = pjp.proceed();
+ long end = System.nanoTime();
+ String methodName = pjp.getSignature().getName();
+ logger.info("Execution of " + methodName + " took " + TimeUnit.NANOSECONDS.toMillis(end - start) + " ms");
+ return retval;
+ }
+
+}