public static synchronized void enable() {
        if (enabled) {
            return;
        }
        Hooks.onEachOperator(ON_EACH_OPERATOR_HOOK_KEY, source -> {
            if (source instanceof ContextHolder || isReproducibleScalarType(source)) {
                return source;
            }

            if (source instanceof Scannable) {
                final Object parent = ((Scannable) source).scanUnsafe(Attr.PARENT);
                if (parent instanceof ContextHolder) {
                    return makeContextAware(source, ((ContextHolder) parent).context());
                }
            }
            return RequestContext.mapCurrent(requestContext -> makeContextAware(source, requestContext),
                                             () -> source);
        });

        Hooks.onLastOperator(ON_LAST_OPERATOR_HOOK_KEY, source -> {
            if (source instanceof ContextHolder || isReproducibleScalarType(source)) {
                return source;
            }

            if (source instanceof Scannable) {
                final Object parent = ((Scannable) source).scanUnsafe(Attr.PARENT);
                if (parent instanceof ContextHolder) {
                    return makeContextAware(source, ((ContextHolder) parent).context());
                }
            }
            return source;
        });

        Schedulers.onScheduleHook(ON_SCHEDULER_HOOK_KEY, task -> {
            return RequestContext.mapCurrent(requestContext -> requestContext.makeContextAware(task),
                                             () -> task);
        });

        enabled = true;
    }
Enables {@link RequestContext} during Reactor operations.
The reactor {@link Publisher}s such as {@link Mono} and {@link Flux} will have the
{@link RequestContext} which is in the {@link RequestContextStorage} when the {@link Publisher}s
are created. Then, the {@link RequestContext} is propagated during the
operations so that you can get the context using {@link RequestContext#current()}.

<p>However, please note that {@link Mono#doOnCancel(Runnable)}, {@link Mono#doFinally(Consumer)},
{@link Flux#doOnCancel(Runnable)} and {@link Flux#doFinally(Consumer)} will not propagate the context.

<p>Also, note that this method does not have any relevance to Reactor's own {@link Context} API.
reactor3/src/main/java/com/linecorp/armeria/common/reactor3/RequestContextHooks.java