В этом конкретном случае веб-клиент правильно вызовет фильтр. Однако, будьте осторожны с этим в целом.
В первом случае регистрация будет происходить, когда метод вызван . На самом деле это может быть неправильно, если вызывающая сторона никогда не подписывается на возвращенного издателя. Издатель также может быть вызван много раз, как в случае повторной попытки или повтора и т. Д. c. и это тоже будет неправильно.
Во втором случае он будет вызываться каждый раз, когда он подписан на.
public class Foo {
static Mono<String> echo(String message) {
System.out.println("echo called with " + message);
return Mono.just(message);
}
static Mono<String> rxEcho(String message) {
return Mono.just(message).doOnNext(msg -> System.out.println("rxEcho was called with " + msg));
}
public static void main(String[] args) {
//logged, even though never actually called
echo("no sub");
//only logs 1 time
echo("retry")
.repeat(3)
.blockLast();
System.out.println("---------------");
//never subbed, never logged
rxEcho("no sub");
//all 4 calls are logged
rxEcho("retry")
.repeat(3)
.blockLast();
}
}
Также обратите внимание, что вы не должны звонить Я не хотел путать пример с StepVerifier. Любой вариант block () в реальном коде.