Мой код загрузки Spring имеет аспект ведения журнала, в котором записывается время, необходимое для завершения метода.Есть некоторые классы, для которых я не хочу этого поведения, поэтому я создал аннотацию NoLogging
для размещения в классе, для которого не хочу запускать аспект.Но это не работает вообще.Я все еще вижу, как аспект работает на классах с моей аннотацией.Я недостаточно понимаю Spring AOP, чтобы точно знать, где я определяю !@annotation(org.apa.idem.sso.aspect.logging.NoLogging)
.Может кто-нибудь помочь?
Вот реализация этого аспекта:
@Component
@Aspect
public class IdemSsoLoggingAspect {
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
*
* This method will calculate the Time taken by the public methods
*
*
* @param joinPoint
* @return
* @throws Throwable
*/
private final static String executionString = "!@annotation(org.apa.idem.sso.aspect.logging.NoLogging) && execution(public * org.apa.idem.sso.rest.*.*(..)) || execution(public * org.apa.idem.sso.web.controller.*.*(..)) || execution(public * org.apa.idem.sso.service.*.*(..)) || @annotation(org.apa.idem.erights.Transactional)";
@Around(executionString)
public Object logTimeMethod(ProceedingJoinPoint joinPoint) throws Throwable {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object retVal = joinPoint.proceed();
stopWatch.stop();
StringBuffer logMessage = new StringBuffer();
logMessage.append(" execution time: ");
logMessage.append(stopWatch.getTotalTimeMillis());
logMessage.append(" ms");
logMessage.append(joinPoint.getTarget().getClass().getName());
logMessage.append(".");
logMessage.append(joinPoint.getSignature().getName());
logMessage.append("(");
// append args
Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
logMessage.append(args[i]).append(",");
}
if (args.length > 0) {
logMessage.deleteCharAt(logMessage.length() - 1);
}
logMessage.append(")");
logger.error("****************** Time taken " + logMessage.toString());
return retVal;
}
}
Может кто-нибудь сказать мне, что я делаю не так?