【问题标题】:java dependency inject ambiguous overwritejava依赖注入模糊覆盖
【发布时间】:2021-09-08 11:40:30
【问题描述】:

我正在使用openapi生成器生成java-resteasy服务器存根代码模板,我的想法是使用生成器生成一些我永远不会修改的接口,我将用我自己的代码实现该接口。

但是,生成器已经生成了实现类,我编写了自己的实现类来扩展生成的实现类。所以现在有两个实现类,所以 CDI 抱怨歧义:

javax.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type openapidemo.gen.FruitsApiService and qualifiers [@Default]

当 CDI 尝试发现 bean 时,有什么方法可以将我自己的实现类标记为第一优先级?从而覆盖openapi生成的那个。

编辑:

根据@Negi 的回答,@Alternative 可能是在 CDI 搜索 bean 时将类指示为低优先级的一种方式,但是,就我而言,我想隐藏生成的代码而不修改它,因为我将在我的repo,我希望代码生成是幂等的。那么有没有办法用我自己的实现类将一个类注释为“优先级”,与@Alternative相反?

【问题讨论】:

    标签: java dependency-injection resteasy openapi-generator


    【解决方案1】:

    您可以创建一个名为 .openapi-generator-ignore 的文件并提及您不想生成的文件。

    https://openapi-generator.tech/docs/faq-extending/#how-do-i-skip-files-during-code-generation

    【讨论】:

      【解决方案2】:

      这是模棱两可的,因为 CDI 按类型搜索 bean,而您的实体和生产者方法返回相同的类型。

      请在 bean 级别添加 @Alternative 注释。

      【讨论】:

      • 如果我理解正确,应将替代注释添加到我想忽略的注释中,在我的情况下,是生成的代码。但是我不想修改生成的代码,因为我会在我的仓库中检查它,并且我希望代码生成是幂等的。那么有没有办法将一个类注释为“优先级”,而不是替代?
      猜你喜欢
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多