2013-03-28 4 views
0

나는 stackoverflow 및 기타 리소스를 찾아서 대답을 찾고 어쩌면 얻지 못할 수도 있습니다.GIN 위젯 (widget) 필드에 @Singleton을 입력하십시오.

내 응용 프로그램의 클라이언트 코드에서 여러 위젯과 클래스에 GIN @Singleton을 주입하려고합니다. Spring을 사용하면 간단하게 정확한 주석을 사용할 수 있고 아무 것도 주사 할 수 있습니다. GWT와 GIN 사용하기 나는 생성자 이외의 곳에서는 주입 할 수 없다. 매우 큰 프로젝트를 수행하고 있기 때문에 생성자에 삽입하고 싶지 않으며 거의 ​​불가능합니다.

위의 클래스 중 일부는 위젯이며 다른 클래스는 그렇지 않습니다. 그것들은 애플리케이션 전반에 걸쳐 사용되고 일부는 주입되고, 다른 것들은 새로운 것에 의해 인스턴스화되고, 다른 것들은 둘 모두를 가지기 때문에 생성자를 변경하는 것이 훨씬 어렵다.

내가 코드는 다음과 같이 일하고 싶어하지만 GIN 작동 방법을 이해하지 않습니다

누군가가 다른이가 발표자로 일을하고 작동 왜 가지 이해 코딩
@Singleton 
public class ApplicationData { 

    public AppInfo getAppInfo() { 
     return new AppInfo("My App Info"); 
    } 
} 

public class MyClass{ 
    @Inject protected ApplicationData applicationData; 

    public void someMethod() { 
     doSomething(applicationData.getAppInfo()); 
    } 
} 

하지만, 나는 개념을 완전히 이해하지 못한다. 그들은 더 이상 물어볼 필요가 없습니다. 여기

는 작동 할 수 있도록 내가 가진 해킹,하지만 난 그냥 그것을 좋아하지 않아 :

@GinModules(GinModule.class) 
public interface Injector extends Ginjector { 
    final Injector INSTANCE = GWT.create(Injector.class); 

    ApplicationData getApplicationData(); 
} 

public class MyWidget extends Composite implements TakesValue<Integer>{ 

    public static interface MyWidgetUiBinder extends UiBinder<FormPanel, MyWidget>} 

    private MyWidgetUiBinder uiBinder = GWT.create(MyWidgetUiBinder.class); 
    private ApplicationData appData; 

    public ArrivalTimeWidget() { 
     appData = Injector.INSTANCE.getApplicationData(); 
     initWidget(uiBinder.createAndBindUi(this)); 
     someMethod(appData.getAppInfo()); 
    } 
} 

이렇게 제대로 대신 해킹을 사용하여 저를 도와주세요. 그리고 나에게 어리석은 것처럼 나를 대하시기 바랍니다. 왜냐하면 이것에 관해서는, 나는 바보입니다.

+0

Spring이 어떻게 달라질 지 궁금하다. GIN이 필드를 삽입하지 않으면 클래스를 인스턴스화하지 않아야하기 때문이다. 나는 스프링 DI에 대해서도 마찬가지라고 생각한다. –

+0

링크를 클릭하십시오. 그것은 도움이 될 수도 있습니다 .http : //stackoverflow.com/questions/6495303/inject-entry-point-class-in-gwt-with-gin? rq = 1 – PVR

+0

@Ranna, 이것이 내가보기에 유용한 유일한 것입니다. 그 링크 : "의존성 주입을하려면 인젝터를 사용하여 GIN을 통해 클래스를 초기화해야합니다 (앞서 언급 한대로)." 그래서 의존성 삽입을 사용하기 위해 1000 개의 클래스를 모두 GIN에 의해 ​​인스턴스화해야 할 필요가있는 것 같습니다. 바보가 아니라면 그것은 어리석은 것처럼 보입니다. 더 나은 방법이 없습니까, 아니면 GIN이 진화하지 않았습니까? 위에서 설명한 내 방식대로 작동하므로 GIN이 필드 구성원에게 주석을 삽입하는 데 동일한 철학을 사용할 수없는 이유는 무엇입니까? 자연이 매우 제한된 것 같습니다. 어느 쪽이든, 또는 나는 아직도 그것을 얻지 못한다. – user1209809

답변

0

@ 토마스 브로 이어 (Tony Broyer)가 말했듯이 대답은 내가 스스로 주입 한 물체에서만 주입 할 수 있다는 것입니다. "새로운"객체를 만들고 주입하지 않았습니다.