@Around("execution (@org.springframework.scheduling.annotation.Scheduled  * *.*(..))")
 public Object traceBackgroundThread(final ProceedingJoinPoint pjp) throws Throwable {
   Trace trace = this.tracer.startTrace(pjp.toShortString());
   try {
     return pjp.proceed();
   } finally {
     this.tracer.close(trace);
   }
 }
  @Around("within(@org.springframework.stereotype.Repository *)")
  public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
    if (this.enabled) {
      StopWatch sw = new StopWatch(joinPoint.toShortString());

      sw.start("invoke");
      try {
        return joinPoint.proceed();
      } finally {
        sw.stop();
        synchronized (this) {
          this.callCount++;
          this.accumulatedCallTime += sw.getTotalTimeMillis();
        }
      }
    } else {
      return joinPoint.proceed();
    }
  }
 public Object profile(ProceedingJoinPoint pjp) throws Throwable {
   StopWatch stopWatch = new StopWatch();
   stopWatch.start(pjp.toShortString());
   boolean isException = false;
   try {
     return pjp.proceed();
   } catch (RuntimeException exception) {
     isException = true;
     throw exception;
   } finally {
     stopWatch.stop();
     TaskInfo taskInfo = stopWatch.getLastTaskInfo();
     System.out.println(
         taskInfo.getTaskName()
             + ": "
             + taskInfo.getTimeMillis()
             + " ms"
             + (isException ? " (thrown Exception)" : ""));
   }
 }
  public void setUp(final Object testService) {
    MockitoAnnotations.initMocks(this);
    when(cache.getName()).thenReturn(AnnotationConstants.DEFAULT_CACHE_NAME);
    when(cache.getProperties()).thenReturn(new CacheProperties());
    advice = createAdvice();
    CacheBase cacheBase = new CacheBase();
    cacheBase.addCache(cache);
    advice.setCacheBase(cacheBase);

    when(signature.getName()).thenReturn(methodName);
    when(signature.getParameterTypes()).thenReturn(paramTypes);
    when(pjp.getSignature()).thenReturn(signature);
    when(pjp.toShortString()).thenReturn(methodName);
    when(pjp.getArgs()).thenReturn(params);

    when(signature.getDeclaringType()).thenReturn(testService.getClass());
    when(pjp.getTarget()).thenReturn(testService);

    if (isValid && cacheKey == null) {
      cacheKey = getKey(getNamespace(), params);
    }
  }