2013-01-23 5 views
0

프로듀서 메서드는 인스턴스를 프로그래밍 방식으로 만들고 컨텍스트에서 인스턴스를 게시하는 데 매우 유용합니다. 문제는 new에 의해 생성되고 생성자 메서드에서 반환 된 인스턴스의 모든 속성이 CDI에 의해 삽입되지 않는다는 것입니다. Weld 문서에서 나는 이것이 의도적 인 행동이라고 읽었지 만 많은 경우에 그 bean에 대한 주입은 매우 유용 할 것입니다.생성자 메서드로 만든 빈에 CDI 삽입 가능

이러한 빈을 주입 할 수있는 해결 방법이 있습니까?

답변

1

먼저, 왜 당신은 어쨌든 주입이 필요한 콩을 위해 생산자를 사용하고 있는지 물어야합니다.

그렇다면 BeanManager에서 새 인스턴스를 만들어야합니다. https://github.com/apache/incubator-deltaspike/blob/master/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java#L115을 보시고 (간단히 Producer 메소드에 BeanManager를 매개 변수로 삽입하고 동일한 코드를 수행 할 수 있습니다).

+0

친애하는 LightGuard, 답장을 보내 주셔서 감사합니다. 나는 그 방향으로 조사 할 것이다. 주사를 요구하는 제작자가있는 빈을 만드는 것에 대한 질문에 대답하려면 데스크톱 (즉 스윙) 응용 프로그램을위한 프레임 워크에서보기를 만드는 방법을 공개하려고한다고 가정합니다. 클라이언트가 뷰를 생성 할 수있게하는 가장 좋은 방법은 팩토리 인터페이스를 제공하는 것입니다. 이제는 내 프레임 워크에서 뷰를 만드는 데 해당 팩토리를 사용할 수 있지만 이러한 뷰는 DI를 사용할 수 없습니다. 그래서 제 생각은 제작자가 뷰를 CDI에 노출시켜 종속적 인 사후 관리를하도록하는 것이 었습니다. 이 동작이 유용 할 수 있다고 생각합니다 ... – jactor

+0

BeanProvider가 생성 된 상황입니다. – LightGuard

+0

'new'로 생성 된 인스턴스에 CDI 빈을 삽입하려면 BeanProvider # injectFields를 사용하십시오 –

관련 문제