package com.eswaraj.base.aspect; 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.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * This class is aspects for all repository save method and work with TestObjectContextManager to keep * track of all objects being saved and then remove them after test is finished * * @author ravi * */ @Aspect @Component public class RepositorySaveAspect { private Logger logger = LoggerFactory.getLogger(this.getClass()); public RepositorySaveAspect(){ } @Autowired private TestObjectContextManager testObjectContextManager; //@Before("execution(* com.rapzzy.domain.repo.*.save(..))") public void beforeRepoSave() { } @Around("execution(* com.eswaraj.domain.repo.*.save(..))") public Object around(ProceedingJoinPoint pjp) throws Throwable { logger.trace("{}, with Argument {}",pjp.getSignature(),pjp.getArgs()[0]); Object retVal = pjp.proceed(); logger.trace("Method Returned {}" , retVal); testObjectContextManager.addSavedObject(retVal); return retVal; } }