2012-07-16 5 views
0

내 애플리케이션에서 프로세서 빈 컬렉션을 만드는 팩토리가 있습니다.팩토리 클래스를 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가 내 프로세서 하위 클래스를 찾으려면 기본 no-args ctor를 만들어야했습니다.

@Inject @Any Instance<Processor> allProcessorInstances; 

CDI 컨테이너에 사용하려는 생성자를 사용하도록 알리는 방법이 있습니까? 아니면이 문제에 대해 잘못된 생각을하고 있습니까?

답변

2

생성자를 사용하려면 @Inject로 주석을 추가해야합니다. 그러나 생성자의 모든 매개 변수 자체는 CDI 범위의 bean 또는 무언가 여야합니다.

생산자 방법을 사용하고 그 중 하나가 param으로 InjectionPoint이되면 어노테이션에 포함 된 구성이 작동합니다.