【问题标题】:Replacing factory class with CDI用 CDI 替换工厂类
【发布时间】:2012-07-16 05:35:55
【问题描述】:

我的应用程序中有一组处理器 bean 以及用于创建它们的工厂。

public abstract class Processor {
    public Processor(String config) { .... }
    public abstract void process() throws Exception;
}

public class Processor1 extends Processor {
    public Processor1(String config) { super(config);..}
    public void process() {....}
}

public Processor newProcessor(String impl, String config) {
    // use reflection to create processor
}

我可以使用 CDI 替换工厂类/方法吗?而是使用@Produces?

我尝试使用以下内容来迭代或选择我想要的实例。但是 Weld 告诉我 allProcessorInstances.isUnsatisfied() == true。为了让 Weld 找到我的处理器子类,我必须创建默认的无参数 ctor。

@Inject @Any Instance<Processor> allProcessorInstances;

有没有办法告诉 CDI 容器使用我希望它使用的构造函数?还是我想错了这个问题?

【问题讨论】:

    标签: cdi jboss-weld


    【解决方案1】:

    要使用构造函数,您需要使用 @Inject 对其进行注释,但是,构造函数上的每个参数本身必须是 bean 或 CDI 范围内的东西。

    使用生产者方法并将InjectionPoint 作为参数,然后将您的配置作为注释的一部分即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多