Вы можете использовать АОП. В Spring я использую 2 зависимости:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
Определение pointcut и использование аннотации @Around
. У метода есть аргумент: org.aspectj.lang.ProceedingJoinPoint joinPoint
. Не забудьте вернуть ответ:
private Object proceedSoapExecution(ProceedingJoinPoint joinPoint) throws Throwable {
long startExcecution=System.currentTimeMillis();
Object response = joinPoint.proceed(joinPoint.getArgs());
long endExcutution=System.currentTimeMillis();
long timeDuration=endExcutution-startExcecution;
logTimeExcecution(soapTimeDuration, timeDuration);
return response;
}