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

在带有MongoDB Panache的CodecProvider中不可能有依赖注入?

邬令
2023-03-14

我可以按照官方文档中的描述创建自定义MongoDB编解码器提供程序,但是有没有可能在一个编解码器提供程序中进行依赖注入,如下所示?

@ApplicationScoped
public class MyCodecProvider implements CodecProvider {

    @Inject
    HistoryService historyService;

    @Override
    public <T> Codec<T> get(Class<T> clazz, CodecRegistry registry) {
        if(History.class.isAssignableFrom(clazz))
            return new HistoryCodec(historyService.getSchema());
        return null;
    }
}

如果不是,您将如何在Quarkus中实现应用程序感知的编解码器?

达米安

共有1个答案

拓拔谭三
2023-03-14

这是不可能的,我不认为我们会支持它。

MongoDB编解码器的目的是将对象序列化到MongoDB数据库,它不是CDI bean,它只是一个POJO。

它与Jackson或JSON-B序列化器/反序列化器是相同的类,它们也不是CDI bean。

如果您想执行某种映射阶段(这是您的代码似乎要做的),那么应该在将对象持久化到MongoDB之前在您的服务层上进行。

编解码器只是一个处理对象属性(比如Java Bean)如何映射到BSON文档的类。上面不应该有任何复杂的计算(想象一下有人会从编解码器调用数据库!)。

 类似资料:
  • 我有一个mvn项目,它包含对apache Commons-Lang3的依赖。我设法为这个jar文件生成了一个manifest.mf,它通过我的远程服务器上的java-jar.jar启动。然而,它不包括任何依赖项,我不知道为什么。 您可以看到,它正确地将依赖关系解析为commons-lang并将其放入清单中。但实际文件不见了。 有人知道为什么吗?

  • 我在用Guice辅助注射。下面是一个标准场景: 现在,我可以使用Guice factory调用,并通过Guice注入的实例轻松获得我的实例。 我的问题是:如果我希望引用正在创建的的实例,该怎么办?换句话说,我想要: 我当前的解决办法相当难看:我手动创建了一个,而不使用,然后使用获取实例,并在实例上调用方法。啊!

  • 如何在类中注入依赖与@Inject注释micronaut框架 如何使用@Inject

  • 问题是,Jersey服务器似乎不能使用Spring的ApplicationContext,我们在这里定义了这种依赖关系。 这里是JerseyConfiguration 这里是具有的筛选器 问候

  • null 0.0.1-快照 _remote.repositories Maven-metadata-local org-utility-0.0.1-snapshot.jar org-utility-0.0.1-snapshot.pom org-utility-0.0.1-snapshot-jar-with-dependencies.jar 因此,我能够将jar“retrieve org-utili

  • 在不讨论原因的情况下,假设有人想要一个老式的Play Framework web服务,并且不想使用依赖注入,也不想依赖Google的Guice。在玩法2.8.x中还可能吗? 有没有一个简单的方法可以让你不去这里就呆在老学校里? 我承认,但不完全理解https://www.playframework.com/documentation/2.4.x/migration24。我认为我的问题与2.7中删除