用CDI替换工厂类

时间:2012-07-16 05:35:55

标签: cdi jboss-weld

我的应用程序中有一系列处理器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。我必须创建默认的no-args ctor才能让Weld找到我的Processor子类。

@Inject @Any Instance<Processor> allProcessorInstances;

有没有办法告诉CDI容器使用我想要它使用的构造函数?或者我是以错误的方式思考这个问题?

1 个答案:

答案 0 :(得分:2)

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

使用生成器方法并将InjectionPoint作为参数,然后将配置作为注释的一部分将起作用。