Заглянул в пружинный привод MetricsWebFilter
И увидел этот код:
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(exchange).compose((call) -> filter(exchange, call));
}
private Publisher<Void> filter(ServerWebExchange exchange, Mono<Void> call) {
long start = System.nanoTime();
ServerHttpResponse response = exchange.getResponse();
return call.doOnSuccess((done) -> success(exchange, start))
... more code ...
}
Будет ли какая-либо разница без отображения compose()
?
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(exchange).doOnSuccess( ... ) ... more code...
}
Мои подсказки заключались в том, что compose()
выполняется один раз для каждого подписчика по сравнению с transform()
. doOnSuccess()
однако также выполняется один раз для каждого подписчика.
Это просто для удобства, использовать функцию filter(...)
вместо встроенного кода?