2012-07-16 40 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,然後有你的配置是一個註釋會工作的一部分。