2017-01-16 7 views
3

난 내 자신의 Guice 모듈을했습니다 및 구성 방법에, 나는 아래로 내 자신의 바인딩을 제공 한 -Guice Module에 새 바인딩을 추가 하시겠습니까?

public void configure() { 
    MapBinder<String, ExternalDatabaseConnection> m = MapBinder.newMapBinder(binder(), String.class, ExternalDatabaseConnection.class); 
    m.addBinding("DBServer1").to(ExternalDBServer1Connection.class); 
    m.addBinding("DBServer2").to(ExternalDBServer2Connection.class); 
} 

은 위의 웹 응용 프로그램으로 배포됩니다. 타사 공급자가 자체 구현을 제공하고 연결 클래스에 jar 파일을 제공 할 수있게하려고합니다. 어떻게해야합니까? 위 코드를 수정하여 아래와 같이 새 바인딩을 추가하는 대신에 -

m.addBinding("DBServer3").to(ExternalDBServer3Connection.class); 
+0

제 3 자 코드는 이미 모듈을 설치하고'MapBinder'를 사용하여이 작업을 수행 할 수 있습니다. –

답변

3

모듈을 결합 할 수 있습니다. 다음은 그 예입니다. 별도로 사는 extenral 및 내부 모듈이 있다고 가정 해 보겠습니다.

public class InternalModule extends AbstractModule { 

    @Override 
    protected void configure() { 
     MapBinder<String, String> m = MapBinder.newMapBinder(binder(), String.class, String.class); 
     m.addBinding("DBServer1").toInstance("Value1"); 
     m.addBinding("DBServer2").toInstance("Value2"); 
    } 

} 

과 : 여기

public class ExternalModule extends AbstractModule { 

    @Override 
    protected void configure() { 
     MapBinder<String, String> m = MapBinder.newMapBinder(binder(), String.class, String.class); 
     m.addBinding("DBServer3").toInstance("Value3"); 
    } 

} 

는 두 모듈의 조합을 기반으로 인젝터 (예 :이 앱에 살 수 있으며, 당신은 몇 가지 간단한 등록 메커니즘을 구현할 수) :

InternalModule moduleInt = new InternalModule(); 
ExternalModule moduleExt = new ExternalModule(); 

Module combined = Modules.combine(moduleInt, moduleExt); 

Injector injector = Guice.createInjector(combined); 

이 인젝터가지도를 삽입하면 예 :

@Inject 
private Map<String, String> stringMap; 
,210

이지도는 다음과 같은 값을 포함합니다 :

{DBServer1=Value1, DBServer2=Value2, DBServer3=Value3} 

Javadoc of Modules합니다.

모듈을 조합하는 대신 모듈을 재정의 할 수도 있습니다. 이 경우 외부 라이브러리가 사용자의 구현을 대체합니다.

희망이 도움이됩니다.