当前位置: 首页 > 知识库问答 >
问题:

从Quarkus扩展中暴露CDI豆

韦俊英
2023-03-14

我正在尝试实现一个基于运行时配置的Quarkus扩展,它提供了一个SecurityIdentityUggmentor。

部署:

我的处理器

@Record(ExecutionTime.RUNTIME_INIT)
@BuildStep 
private MyMarkerConfiguredBuildItem setupAugmentor(MyRecorder recorder, MyAugmentorConfig config, BeanContainerBuildItem beanContainer) {
    recorder.sertConfig(config, beanContainer.getValue();
    return new MyMarkerConfiguredBuildItem ();
}

运行时:

  1. 我的录音机:
public void setConfig(MyAugmentorConfig config, BeanContainer beanContainer) {
    beanContainer.instance(MyProducer.class).setConfig(config);
}
@ApplicationScoped
public class MyProducer {

    public void setConfig(MyConfig config) {
        this.config = config;
    }

    @Produces
    @ApplicationScoped
    public MyAugmentor createAugmentor() {
        return new MyAugmentor(this.config);
    }
}

在客户端应用程序中生成MyAugmentor实例的唯一方法是添加一个bean。扩展的运行时模块中的xml。但是我没有看到豆子。github repo中的其他扩展中的xml。有人能给我指一下正确的方向吗?

共有1个答案

扶誉
2023-03-14

您只需要使用构建步骤在扩展的部署模块中注册生产者bean(因为它不会被自动发现,因为扩展没有索引):

@BuildStep
public AdditionalBeanBuildItem producer() {
    return new AdditionalBeanBuildItem(MyProducer.class);
}

生产者必须位于扩展的运行时模块中,您可以将配置注入其中。

@ApplicationScoped
public class MyProducer {

    @Inject MyConfig config;

    @Produces
    @ApplicationScoped
    public MyAugmentor createAugmentor() {
        return new MyAugmentor(this.config);
    }
}

这个结构在很多现有的扩展中都有使用,你可以在这里看到我的Firestore扩展的例子:https://github.com/quarkiverse/quarkus-google-cloud-services/tree/master/firestore

 类似资料:
  • 扩展说明 当有服务暴露时,触发该事件。 扩展接口 org.apache.dubbo.rpc.ExporterListener 扩展配置 <!-- 暴露服务监听 --> <dubbo:service listener="xxx,yyy" /> <!-- 暴露服务缺省监听器 --> <dubbo:provider listener="xxx,yyy" /> 已知扩展 org.apache.dubbo

  • 主要内容:1.概述,2.doExportUrls,3. Protocol1.概述 Dubbo 服务暴露有两种方式 本地暴露,JVM 本地调用。配置如下: <dubbo:service scope=“local” /> <dubbo:service scope=“remote” /> 在不配置 scope 的情况下,默认两种方式都暴露。 2.doExportUrls 本地暴露服务的顺序图如下: 我们看到 ServiceConfig#export() 方法中,会在配置初始

  • 我正在使用下面的片段将我的高级自定义字段(ACF)公开给WP REST应用编程接口。这将大约700个字段拉入应用编程接口,而我真的只需要一个(acf.product_description_rows.product_row_type) 这是一种过滤ACF字段并仅包含一个字段的方法吗?

  • 如果你的服务需要预热时间,比如初始化缓存,等待相关资源就位等,可以使用 delay 进行延迟暴露。我们在 Dubbo 2.6.5 版本中对服务延迟暴露逻辑进行了细微的调整,将需要延迟暴露(delay > 0)服务的倒计时动作推迟到了 Spring 初始化完成后进行。你在使用 Dubbo 的过程中,并不会感知到此变化,因此请放心使用。 Dubbo-2.6.5 之前版本 延迟到 Spring 初始化完

  • EXPOSE 声明端口 格式为 EXPOSE <端口1> [<端口2>...]。 EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,

  • 8.1. 源码暴露 你的WEB服务器必须要能够读取你的源确并执行它,这就意味着任意人所写的代码被服务器运行时,它同样可以读取你的源码。在一个共享主机上,最大的风险是由于WEB服务器是共享的,因此其它开发者所写的PHP代码可以读取任意文件。 <?php header('Content-Type: text/plain'); readfile($_GET['file']); ?> 通过在你的源码所在的