java 依赖注入模糊覆盖
java dependency inject ambiguous overwrite
我正在使用 openapi 生成器生成 java-resteasy
服务器存根代码模板,我的想法是使用生成器生成一些我永远不会修改的接口,我将用我自己的代码实现该接口。
但是,生成器已经生成了实现 class,我编写了自己的实现 class 来扩展生成的实现。所以现在有两个实现 classes,所以 CDI 抱怨模棱两可:
javax.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type openapidemo.gen.FruitsApiService and qualifiers [@Default]
有什么方法可以在 CDI 尝试发现 bean 时将我自己的实现 class 标记为第一优先级?从而覆盖openapi生成的。
编辑:
根据@Negi 的回答,@Alternative
可能是一种在 CDI 搜索 bean 时将 class 指示为低优先级的方法,但是,就我而言,我想隐藏生成的代码而不修改因为我会在我的回购协议中检查它,我希望代码生成是幂等的。那么有什么方法可以用我自己的实现 class 将 class 注释为“优先级”,而不是 @Alternative
?
这是不明确的,因为 CDI 按类型搜索 bean,并且您的实体和生产者方法 return 类型相同。
请在 bean 级别添加 @Alternative 注解。
您可以创建一个名为 .openapi-generator-ignore
的文件并注明您不希望生成的文件。
https://openapi-generator.tech/docs/faq-extending/#how-do-i-skip-files-during-code-generation
我正在使用 openapi 生成器生成 java-resteasy
服务器存根代码模板,我的想法是使用生成器生成一些我永远不会修改的接口,我将用我自己的代码实现该接口。
但是,生成器已经生成了实现 class,我编写了自己的实现 class 来扩展生成的实现。所以现在有两个实现 classes,所以 CDI 抱怨模棱两可:
javax.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type openapidemo.gen.FruitsApiService and qualifiers [@Default]
有什么方法可以在 CDI 尝试发现 bean 时将我自己的实现 class 标记为第一优先级?从而覆盖openapi生成的。
编辑:
根据@Negi 的回答,@Alternative
可能是一种在 CDI 搜索 bean 时将 class 指示为低优先级的方法,但是,就我而言,我想隐藏生成的代码而不修改因为我会在我的回购协议中检查它,我希望代码生成是幂等的。那么有什么方法可以用我自己的实现 class 将 class 注释为“优先级”,而不是 @Alternative
?
这是不明确的,因为 CDI 按类型搜索 bean,并且您的实体和生产者方法 return 类型相同。
请在 bean 级别添加 @Alternative 注解。
您可以创建一个名为 .openapi-generator-ignore
的文件并注明您不希望生成的文件。
https://openapi-generator.tech/docs/faq-extending/#how-do-i-skip-files-during-code-generation