1   package com.atlassian.spring.interceptors;
2   
3   import com.atlassian.util.profiling.ProfilingUtils;
4   import com.atlassian.util.profiling.UtilTimerStack;
5   import org.aopalliance.intercept.MethodInterceptor;
6   import org.aopalliance.intercept.MethodInvocation;
7   
8   /**
9    * A Spring AOP Interceptor to plug into the atlassian-profiling component.
10   */
11  public class SpringProfilingInterceptor implements MethodInterceptor
12  {
13      public Object invoke(MethodInvocation invocation) throws Throwable
14      {
15          String name = "AOP: " + ProfilingUtils.getJustClassName(invocation.getMethod().getDeclaringClass()) + "." + invocation.getMethod().getName() + "()";
16  
17          UtilTimerStack.push(name);
18          try
19          {
20              return invocation.proceed();
21          }
22          finally
23          {
24              UtilTimerStack.pop(name);
25          }
26      }
27  }