java - 在不同的包中为同一类使用两个 CDI 生成器 (Intellij)

标签 java dependency-injection cdi

我有一个使用 CDI 的简单应用程序(我正在 Intellij IDE 中开发)。 初始化使用生产者

   @Produces
   public @Alg int getExperimentSize() {
       return 1000;
   }

我想要两个单独的主文件有两种配置(假设一个有 1000 个,另一个有 100 个)。这会导致“依赖关系不明确”错误。我尝试将生产者设为私有(private),并将主文件移动到不同的包,但它们仍然彼此可见,并且错误仍然存​​在。

是否可以在同一个 Intellij 项目上使用不同的注入(inject)来运行两个不同的主函数?

编辑:根据@Smutje 的评论,我给出了一个更详细的示例: 假设我们有一个接口(interface)

public interface SortingAlgorithm <T extends Comparable<T>>{
    void sort(T[] array);
}

类 AlgorithmRunner 被注入(inject)这样的属性

public class AlgorithmRunner {
    @Inject @Quad
    SortingAlgorithm quadraticAlgorithm;
}

A 团队开发一个实现该接口(interface)的类

public class BubbleSort implements SortingAlgorithm{
}

并使用生产者注入(inject)它

    @Produces
    private  @Quad
    SortingAlgorithm makeQuadSortingAlg() {
        return container.instance().select(BubbleSort.class).get();
    }

B 团队不知道 A 团队,有自己的实现,并希望添加相应的生产者。我想在我的 intellij 项目中说明这种情况。

最佳答案

您是否有理由希望让两个单独的 Java 类作为生产者?

在这样的情况下,当我想支持可配置行为时,我通常会有一个生产者来生成配置并从例如加载其配置。 @PostConstruct 上的属性文件 - 所以我有一个生产者(没有模糊的依赖关系),但也没有硬编码值。

关于java - 在不同的包中为同一类使用两个 CDI 生成器 (Intellij),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59765959/

相关文章:

spring - 注入(inject)和资源以及 Autowiring 注释

java - 如何使用 JMS 和 CDI 1.2 查找 EJB

java - 多线程锁方法

java是向下兼容的,但是为什么jdk从1.6升级到1.8需要升级很多库呢?

java - 依赖注入(inject)是如何手动实现的?

c# - 在 asp.net core 中使用自定义 IServiceProvider 实现

glassfish - Java EE7 的拦截器问题

java - 如何将我的 rest API 映射到根上下文来提供来自 CXF/JAX-RS 的静态内容?

java - 如何获取每天随着天数递增的输出

java - 如何在 Spring 中实现基于注解的集合合并?