2012-07-16 41 views
0

我的应用程序中有一系列Processor Bean以及一个用于创建它们的工厂。用CDI替换工厂类

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容器使用我希望它使用的构造函数?或者我以错误的方式思考这个问题?

回答

2

要使用你需要使用@注入注释它的构造,但是,在构造每个PARAM本身必须是在CDI范围豆什么的。

使用生产方法和具有采取InjectionPoint作为PARAM,然后有你的配置是一个注释会工作的一部分。