java依赖注入歧义覆盖

时间:2021-06-25 02:57:43

标签: java dependency-injection resteasy openapi-generator

我正在使用 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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

这是不明确的,因为 CDI 按类型搜索 bean,并且您的实体和生产者方法返回相同的类型。

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