2013-03-16 2 views
2

Gin을 사용하여 GWT 비동기 RPC 서비스를 주입하는 방법에 대한 질문이 있습니다. 이 잘 작동GWT 비동기 서비스 주입

class TheViewA {  
    @Inject 
    public TheViewA(MyServiceAsync myServiceASync) { 
     .... 
    } 
} 


class TheViewB { 
    @Inject 
    public TheViewB(MyServiceASync myServiceASync) { 
     .... 
    } 
} 

:

는 둘 다 같은 비동기 서비스를 사용하여 두 개의 클래스가 있습니다. 그러나 GWT가 내부적으로 전화를 걸게된다고 알았습니다.

GWT.create(MyServiceASync.class) 

각 주입마다 두 번. 이 단점은 무엇인지 모르겠지만 둘 다 단일 MyServiceAsync 인스턴스를 공유 할 수 있다고 생각합니다.

두 사람 모두 MyServiceAsync의 인스턴스 만 만들어 지도록 Gin (Guice)을 구성하는 방법을 알려 줄 수 있습니까?

또는 주입에 대해 별도의 인스턴스를 만드는 것이 좋으며 그 이유는 무엇입니까?

감사합니다.

+0

asyn 클래스 성능의 싱글 톤 인스턴스를 갖는 것이 더 낫습니다. 그래도 진 부분은 잘 모르겠다. – SSR

+0

@SSR 당신이 정교 할 수 있습니까? 컴파일 된 코드의 원격 서비스 비동기 코드가 꽤 뼈다린 것보다 적은 수의 인스턴스를 만드는 것이 더 좋을지 모르겠다 ... –

+0

원격 서비스 비동기 생성에 시간이 걸렸습니다 (몇 년 전) 싱글 톤 방식으로 옮겼습니다. – SSR

답변

1

Gin은 주어진 유형에 대한 바인드를 찾지 못하면 자동으로 GWT.create()으로 폴백하여 인스턴스를 만듭니다. 따라서 ClientBundle/GWT-RPC/i18n 등은 단순히 작동하며 사용자가 직접 확장명을 AbstractGinModule (으)로 지정할 필요가 없습니다.

물론 Gin이 동일한 유형의 다른 주사를 발견하면 다른 인스턴스를 주사합니다. 싱글 톤 인스턴스를 생성하고 삽입하려면 GWT-RPC 비동기 서비스 인터페이스를 @Singleton 범위에 바인딩하기 만하면됩니다. 이처럼 :

public class YourModule extends AbstractGinModule { 
    @Override 
    protected void configure() { 
    bind(MyServiceAsync.class).in(Singleton.class); 
    } 
} 

또는 당신은 항상 싱글 인스턴스를 반환하지만 이전의 접근 방식은 훨씬 간단 인 Provider<MyServiceAsync>을 만들 수 있습니다.

응용 프로그램 전체에 단일 비동기 인스턴스가 삽입되는 것이 일반적입니다.

+0

그리고 다른 질문에 답하기 위해 네, 여러 개의 RPC 인스턴스를 만들면됩니다. 즉, 어떤 상태도 가지지 않으므로 더 많은 것을 만들면 상당한 양의 메모리를 사용하지 않게됩니다. 'Singleton' 스코프를 추가하는 것은 다른 인스턴스를 만드는 것을 피하는 올바른 방법이지만,이 경우에는 정말로 걱정하지 않을 것입니다. - 이것에 대한 싱글 톤을 선호하는 이유를 들어 본 적이 없거나 본 적이 없습니다. 대조적으로,'RequestFactory'는 당신이 피할 수있는 설정을 필요로하지만, 나도 그럴만 한 가치가 있는지 확신하지 못합니다. –

+0

답변 해 주셔서 감사합니다. –