2013-10-05 1 views
3

내 응용 프로그램에서 사용자는 프로그램을 시작할 때 명령 줄에서 일부 매개 변수를 전달할 수 있습니다. main (String [] args) 메쏘드에서 나는 args4j로 그것들을 파싱한다. 다음 단계에서는 Injector (Google Guice를 사용)를 만든 다음 주 프로그램 클래스의 인스턴스를 만듭니다. 명령 줄 매개 변수는 내 응용 프로그램의 구성 설정입니다. 저장해야하는 MyAppConfig 클래스가 있습니다.주입 프로세스에서 명령 줄 매개 변수를 포함하는 방법은 무엇입니까?

이러한 명령 줄 매개 변수를 주입 프로세스에 어떻게 포함시킬 수 있습니까? 내 응용 프로그램의 다른 클래스는 MyAppConfig에 의존하므로 몇 군데에 주입해야합니다.

내 마음에 떠오르는 유일한 해결책은 명령 줄 매개 변수에 해당하는 정적 필드가있는 MyAppConfig 공급자를 만들고 args4j를 사용하여 구문 분석을하고 Injector를 사용하기 전에 설정합니다. 그런 공급자는 정적 필드를 사용하여 MyAppConfig를 생성합니다. 그러나 이것은보기 흉한 것처럼 보입니다. 더 우아한 방법이 있습니까?

답변

7

모듈 인스턴스를 생성해야하는 책임이 있기 때문에 원하는 생성자 인수를 전달할 수 있습니다. 여기서해야 할 일은 구성을 생성자 인수로 취한 모듈을 작성한 다음 해당 모듈 내에서 바인딩하는 것입니다.

class YourMainModule() { 
    public static void main(String[] args) { 
    MyAppConfig config = createAppConfig(); // define this yourself 

    Injector injector = Guice.createInjector(
     new ConfigModule(config), 
     new YourOtherModule(), 
     new YetAnotherModule()); 

    injector.getInstance(YourApplication.class).run(); 
    } 
} 

class ConfigModule extends AbstractModule { 
    private final MyAppConfig config; 

    ConfigModule(MyAppConfig config) { 
    this.config = config; 
    } 

    @Override public void configure() { 
    // Because you're binding to a single instance, you always get the 
    // exact same one back from Guice. This makes it implicitly a singleton. 
    bind(MyAppConfig.class).toInstance(config); 
    } 
} 
관련 문제