2012-10-23 2 views
6

GWT에는 자체 구워진 DI 메커니즘 (GWT.create(Class<?>))이있는 것 같습니다. GIN이 제공하는 이점은 무엇입니까? 서로를 함께 사용해야합니까? 아니면 상호 배타적입니까? Guice를 좋아해 GIN을 사용하고 싶지만 GWT가 이미 동일한 기능을 수행하고 있다면 소개하고 싶지는 않습니다.GWT.create (클래스 <?>) 대 GIN?

답변

8

Gin과 GWT.create에는 몇 가지 차이점이 있습니다. Gin은 필드, 설정자 또는 생성자에 대한 @Inject 주석을 통해 종속성을 제공하는 것에 대한 것입니다. 반면 GWT.create은 구현을 구체적으로 가져 오는 것입니다. Gin은 사용자가 제공하는 생성자를 사용하지만 대체 형식을 구체적으로 제공해야합니다. 반면 GWT.create은 기본 생성자에서만 작동하며 '리 바인드 규칙'은 매우 정확할 필요가 없으며 새 클래스를 생성 할 수도 있습니다. 컴파일 할 때 생성됩니다. 또한 사용자가 어떤 환경을 실행 중인지 살펴보고이를 기반으로 특정 규칙 집합을 선택할 수 있습니다. Gin은이를 수행 할 수 없습니다.

진은 실제로 다른 기능을 사용하기 위해 GWT.create을 사용합니다. 규칙이 정의되어 있지 않으면 진은 GWT.create을 자동으로 호출합니다. 해당 RPC 호출을 구축 GWT.create를 호출

@Inject MyRemoteServiceAsync rpcService; 

진 같은 규칙이 경우는 것을 의미한다. 이것은 UiBinder, 편집기 드라이버, I18n 메시지 및 상수 등에서도 작동합니다.

Guice가 이미 이해하고 Guice처럼 Gin을 사용하면 큰 도움이되지 않으며 직접 호출 할 수 있습니다 GwT.create 또는 암시 적으로 Gin에게 요청하십시오. 사실, Gin을 사용하기 위해서도 공을 구르려면 GWT.create(MyGinjector.class)으로 전화해야합니다.

8

GWT.create()은 종속성 삽입과 아무 관련이 없습니다. 공장 인입니다.

GWT.create(SomeThing.class)new SomeThing() 사이의 유일한 차이점은 SomeThing 클래스를 바꿀 수 있거나 소위 deferred binding을 사용하여 생성 할 수 있다는 것입니다. 그러나 예를 들어 GWT.create() 개체에 종속성을 제공하는 것에 대해서는 GWT.create()에 아무것도 없습니다.