Create example with Spring stereotype annotations

- Use component scanning for loading bean definitions
- Use Spring stereotypes to define poincuts
This commit is contained in:
Dmitry Zinkevich
2015-10-23 01:37:20 +03:00
parent 1ef53e2f68
commit 0115fccc3d
6 changed files with 171 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
package org.baeldung.aop;
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;
}
}

View File

@@ -0,0 +1,10 @@
package org.baeldung.dao;
import org.springframework.stereotype.Repository;
@Repository
public class FooDao {
public String findById(Long id) {
return "Bazz";
}
}