2013-08-05 3 views
3

CDI (weld-se 2)와 JavaFX를 결합하려고하는데 내 컨트롤러 클래스를 사용자 정의 주석으로 주석을 추가하여이 클래스 작성을 내 factory 메소드를 사용하여 관리하고 싶습니다. 나는 아래 보이는 것 같아요하지만이 코드는 작동하지 않습니다. 무엇을 바꾸어야할지 조언 해 주시겠습니까?@Produce 메서드를 사용하는 올바른 방법

는 주석 :

@Retention(RetentionPolicy.RUNTIME) 
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE }) 
@Qualifier 
public @interface FXMLManaged { 
} 

공장 클래스 :

public class FXMLManagedProducer { 
    @Produces @FXMLManaged 
    public <T> T getFXMLManagedInstance(Class<T> type) { 
     return type.newInstance(); 
    } 
} 

컨트롤러 클래스 :

@FXMLManaged 
public class NewsListView { 
} 
+0

당신은 스택 추적을보고 있습니까 : 당신은 여기에 몇 가지 뉴스를 찾을 수 있습니까? – LightGuard

+2

이것은 확실히 작동해서는 안됩니다. –

+0

LightGuard, 스택 트레이스가 없습니다. 용접 된 컨트롤러를 만들 때 factory 메소드를 호출하지 마십시오. – Slam

답변

5

당신은 m에 보인다 ix 생산자와의 CDI 확장. 첫째, 제작자를 원할 경우 팩토리 메서드는 제네릭 형식이 아닌 NewsListView을 반환해야합니다. 한정자 주석과 함께 @Producer을 사용하면 주석이 달린 유형으로 바인딩됩니다. 그러므로 NewsListView@FXMLManaged으로 주석을 달 필요가 없습니다. 그런 다음 빈에 어딘가에 NewsListView을 삽입합니다. 생산자를 사용

public class FXMLManagedProducer { 
    @Produces @FXMLManaged 
    public NewsListView getFXMLManagedInstance() { 
     return new NewsListView(); 
    } 
} 

:

public class SomeBean { 
    @Inject @FXMLManaged 
    NewsListView view; 
} 

을하지만 내 생각 엔이게 당신이 찾고있는되지 않는 것입니다

보기를 생산. 나는 당신이 당신의 NewsListView을 주석 처리 할 것 CDI Extension

public class YourExtension implements Extension { 

    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat) { 
     if(pat.getAnnotatedType().isAnnotationPresent(FXMLManaged.class)) { 
      // do your stuff here 
     } 
    } 
} 

이 방법을 만들 수 있습니다 생각합니다. 생명주기에 연결하기위한 다른 방법을 살펴보고 필요할 경우 종속성을 주입 할 수 있습니다.

관련 문제