public <T extends ExtensionPoint, R> Mono<R> invokeFirstExtensionPoint(
            Class<T> extensionPointClass,
            Method method,
            @Nullable Mono<R> defaultValue,
            FirstExtensionPointInvoker<T, R> invoker) {
        List<T> extensionPoints = pluginRepository.getExtensionPoints(extensionPointClass);
        int size = extensionPoints.size();
        if (size == 0) {
            return defaultValue == null
                    ? Mono.empty()
                    : defaultValue;
        }
        T extensionPoint = extensionPoints.getFirst();
        TurmsExtension extension = (TurmsExtension) extensionPoint;
        if (!extension.isRunning()) {
            return defaultValue == null
                    ? Mono.empty()
                    : defaultValue;
        }
        try {
            return invoker.invoke(extensionPoint)
                    .onErrorMap(t -> translateException(t, method, extension));
        } catch (Exception e) {
            return Mono.error(translateException(e, method, extension));
        }
    }
@implNote Start plugins after all beans are ready so that plugins can get any bean when
          starting.
turms-server-common/src/main/java/im/turms/server/common/infra/plugin/PluginManager.java