Возврат Mono из метода @Around аспекта - PullRequest
1 голос
/ 08 марта 2019

Я использую Spring AOP для профилирования времени выполнения метода.Мои методы используют Spring WebFlux и возвращает Mono различных типов, а именно.Map, List, пользовательские объекты классов Java.Но jointPoint.proceed() в @Around advice возвращает объект.Как я могу вернуть тот же Mono из doAround метода.Метод, время выполнения которого я хочу узнать, выглядит следующим образом:

public Mono<Map<Integer, Car>> getCarObject(List<Integer> cardIds) {

    if (cardIds == null || cardIds.isEmpty()) {
        return Mono.fromCallable(() -> new HashMap<>());
    } 

    return Mono.fromCallable(() -> listingClient.getCarObject(carIds).getData());
}

Мой класс аспекта выглядит следующим образом:

@Aspect
@Configuration
public class Demo  {

private Logger logger = LoggerFactory.getLogger(this.getClass());

@Pointcut("execution(* com.Car.*.mediators.*.*(..))")
public void feignClientPointcut() {

}
@Around("feignClientPointcut()")
public void doAround(ProceedingJoinPoint joinPoint) throws Throwable {

        long start = System.currentTimeMillis();

        Object object = joinPoint.proceed();  
        long end = System.currentTimeMillis();

        long time = end - start;
        logger.error("Around Method Name = {}",joinPoint.getSignature().getName());
        logger.error("Around time :{}",time);


}
}

Как я могу вернуть тот же Mono из метода doAround,Потому что при возврате Mono<object> вызывающая функция метода выдает ошибку, ожидая, что Map не объект?

...