Interface Decorators


public interface Decorators
A Decorator builder which can be used to apply multiple decorators to a Supplier, Callable Function, Runnable, CompletionStage or Consumer.

Decorators are applied in the order of the builder chain. For example, consider:

Supplier<String> supplier = Decorators
    .ofSupplier(() -> service.method())
    .withCircuitBreaker(CircuitBreaker.ofDefaults("id"))
    .withRetry(Retry.ofDefaults("id"))
    .withFallback(CallNotPermittedException.class, e -> service.fallbackMethod())
    .decorate();
This results in the following composition when executing the supplier:
Fallback(Retry(CircuitBreaker(Supplier)))
This means the Supplier is called first, then its result is handled by the CircuitBreaker, then Retry and then Fallback. Each Decorator makes its own determination whether an exception represents a failure.