2011-04-13 2 views
1

저는 인젝터가 일반적으로 어떻게 사용되는지 궁금합니다. 나는 그것이 시작시에 주로 사용된다는 것을 알고 있지만, 실행시 특정 구현 객체를 생성하는 데 어떻게 사용하겠습니까?일관성을위한 Guice Injector 싱글 톤 만들기

예를 들어 UserA, UserB 및 UserC를 구현 한 인터페이스 User가 있습니다. 실행 시간에 Guice를 사용하는 나의 생각은 Singleton 클래스로 포장하여 User 객체의 인스턴스를 만들 때마다 새로운 인젝터를 생성하는 대신 가져올 수 있도록하는 것입니다.

//Create in singleton wrapper class 
Injector injector = Guice.createInjector(new SecurityModule()); 

//Retrieve and use at run-time (Manager is the singleton wrapper class) 
Injector injector = Manager.getInstance().getInjector(); 
User user = injector.getInstance(User.class); 

일반적인 방법입니까? 기본적으로 모든 구성을 중앙 집중화하여 오류가 적도록 (예 : 잘못된 모듈 사용) 확인하고 싶습니다. 또한 관리가 더 쉽기 때문에 다른 구성 모듈을 사용하기로 결정한 경우이를 사용하는 모든 Java 클래스가 아닌 클래스에서 변경할 수 있습니다.

감사합니다, 잭

답변

2

당신은 희귀하고 특정 상황을 제외하고 응용 프로그램에서 직접 Injector를 사용할 필요가 없습니다, 심지어 다음 당신은 확실히 그것을 정적 싱글을해서는 안된다. 응용 프로그램의 Guice를 사용하여 User의 새 인스턴스를 검색하려면 Provider<User>을 삽입하고 필요할 때 get()을 호출해야합니다.

1

내가 작성합니다

public class Manager { 
    private static Manager instance; 
    // getInstance singleton method left out for brevity 
    private Injector injector; 
    private Manager() { 
     injector = Guice.createInjector(...); 
    } 
    public <T> T get(Class<? extends T> cls) { 
     return injector.getInstance(cls); 
    } 
} 

은 그래서 당신은 당신이 당신의 응용 프로그램 코드를 변경하지 않고 종속성 주입 프레임 워크를 변경할 수 있도록,

Manager.getInstance().get(User.class)하지가 Guice에서 인젝터를 사용해야 할 수 있습니다.