2014-11-14 1 views
1

모든 코딩이 잘 되었기를 바랍니다. 그래서 ... 저는 작업하는 GWT 앱의 클라이언트 측을 리팩토링하고 있었고 뭔가 궁금했습니다. 며칠 후에 답을 구해서 당신의 견해를 묻기로 결정했습니다 ...사용자 정의 주석으로 GWT.create (XXX.class) 전환

제목은 아주 이해하고 있지만, 내가하고 싶은 부분이 있습니다.

난 내 xxx.gwt.xml에, 나는이 같은 짓을했다고 말을했다이

@CreativeAnnotation 
public AnnotatedObject; 

같은 것을하여이

public AnnotatedObject annotated = GWT.create(AnnotatedObject.class); 

같은 물건을 변경하려면 :

<replace-with class="package.AnnotationObject2"> 
    <when-type-is class="package.AnnotationObject" /> 
</replace-with> 

알다시피, 제 교체 된 클래스는 AnnotationObject2이고, 잠시 동안 o 수행

@CreativeAnnotation(type = "object2") 
public AnnotatedObject; 

그래서 : 정말 내 xxx.html의 메타 데이터와 함께 플레이하고 싶지 않다

<replace-with class="package.AnnotationObject1"> 
    <when-type-is class="package.AnnotationObject" /> 
    <when-property-is name="type" value="object1" /> 
</replace-with> 

<replace-with class="package.AnnotationObject2"> 
    <when-type-is class="package.AnnotationObject" /> 
    <when-property-is name="type" value="object2" /> 
</replace-with> 

, 그래서 원하는 결과는 이것이다 : 이상 NES는 내가 가진 당신은 GWT로 그런 일이 가능하다고 생각합니다 (저는 GWT 2.5로 작업해야한다고 말하고 싶습니다. 고객의 욕구 때문에). 그렇다면 나를 도울 수 있습니까?

미리 감사드립니다.

EDIT : 저는 진에 대해 알고 있습니다. 처음부터 어떻게해야하는지 궁금합니다.

답변

4

GIN을 통한 종속성 삽입을 사용하여이를 수행 할 수 있습니다. GIN은 자동으로 GWT.create()를 사용하여 주입해야하는 객체를 만듭니다. 예 :

class MyView { 
    interface MyUiBinder extends UiBinder<Widget, MyView> { 
    } 

    @Inject 
    MyView(MyUiBinder uiBinder) { 
     initWidget(uiBinder.createAndBindUi(this)); 
    } 
} 

그리고 의존성 주입과

, 당신은 또한 당신의 GIN 모듈에서 인스턴스화하기 위해 인터페이스의 구현이 지정

public class MyModule extends AbstractGinModule { 
protected void configure() { 
    bind(AnnotationObject.class).annotatedWith(Names.named("object1").to(AnnotationObject1.class); 
    bind(AnnotationObject.class).annotatedWith(Names.named("object2").to(AnnotationObject2.class); 
} 
} 

그리고 다음 코드 :

public class MyClass { 

    @Inject 
    public MyClass(@Named("object1") AnnotationObject annotationObject) { 
    ... 
    } 
} 

명명 된 주석 대신 사용자 정의 바인딩 주석을 사용할 수도 있습니다.

+0

+1, 비슷한 (아마도 덜 구체적) 답변을하려고했을 때! Gin은 주어진 문제에 대한 해결책입니다. 우리는 GWT 응용 프로그램에서 그것을 사용하고 거의 GWT.create()를 사용하지 않습니다 ... – PhiLho

+0

당신의 답변에 대해 감사합니다 줄리앙. 사실 모범 사례를 적용하여 GIN을 사용했습니다. 빨리 GIN과 비슷한 것을 쓸 수 있는지 궁금합니다. 그러나 실제로, 귀하의 제안은 "할 수있는 신속한 - 또는 - 우리 - 할 - 찾을 - 다른 사람 -"컨텍스트 때 더 할 일이 가장 좋습니다. 다행히도, 그것은 아니고 단지 내 개인적인 야망을위한 것이 었습니다. –

1

GIN을 사용하지 않으려는 경우 자체 생성기를 작성할 수 있습니다. 이와 같은 경우에는 매우 간단합니다.

+0

너무 했어! 이제 나는 멋진 것을 가지고있다! –

관련 문제