Введите параметр в Spring Aspect Advice - PullRequest
0 голосов
/ 23 октября 2019

У меня есть базовый контроллер пружинного упора, и у меня есть требование компании, которое должно регистрировать запрос и ответ в одном объединенном сообщении журнала. Я планировал сделать это с некоторым простым аспектом.

Однако контроллер вызывает службу, которая, в свою очередь, вызывает API-интерфейс другой третьей стороны, и необходимо указать время, затраченное на этот вызов третьей стороны, в вывод журнала из контроллера, упомянутого выше.

Мне интересно, можно ли этого достичь с помощью аспектов? Я предполагаю, что для основного контроллера потребуется аспект @Around, а затем еще один @Around для вызова API в нисходящем направлении и некоторый способ добавить результат внутреннего аспекта в совет или внешний. Не уверен, что это можно сделать ?? Или, возможно, bean-объект в области запроса прошел через аспекты ??

Спасибо

1 Ответ

0 голосов
/ 30 октября 2019

Как насчет класса Log

public class Log {

private long start;

private long end;

public long getStart() {
    return start;
}

public void setStart(long start) {
    this.start = start;
}

public long getEnd() {
    return end;
}

public void setEnd(long end) {
    this.end = end;
}

@Override
public String toString() {
    return "Log [start=" + start + ", end=" + end + "]";
}

И передать экземпляр этого объекта через вызовы API.

Скажите BeanOne.methodOne (Log, ..) -> BeanTwo.methodTwo(Журнал,..) . BeanTwo.methodTwo () вызывает внешний API, и время записывается в экземпляре журнала.

и следующий совет:

@Around("execution(* methodOne(..)) && args(log)")
    public void testAdviceBeanOne(ProceedingJoinPoint pjp,Log log) {
        System.out.println("Before methodOne()");
        try {
            System.out.println(log);
            pjp.proceed();
            System.out.println(log);
        } catch (Throwable e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("After methodOne()");
    }

Дает вывод

Before methodOne()
Log [start=0, end=0]
Log [start=1572408716134, end=1572408716136]
After methodOne()

Там может быть более элегантное решение, все еще мои два цента

...