2013-06-24 2 views
1

저는 guice를 사용하여 DI, 구체적으로 생성자 주입을 구현하기 위해 노력하고 있습니다. 내가 생성자에 제네릭에 대한 클래스 유형을 주입 할 수있는 방법을 이해하는 데 어려움을 겪고 있습니다.주스를 사용하여 을 사용하여 주입

public class Foo<T> { 

    private Class<T> clazz; 

    Foo(Class<T> clazz) { 
     this.clazz = clazz; 
    } 
} 

나는 런타임에 생성자에 클래스의 유형을 주입하는 guice를 사용할 수 다음과 같이

내 클래스는 무엇입니까? 간단히 말해서 guice를 사용하여 Foo 생성자에 삽입 할 수 있습니까?

답변

1

예, Guice의 built-in injectionTypeLiteral입니다.

public class Main { 
    public static void main(String[] args) { 
     Injector injector = Guice.createInjector(); 

     Test<Integer> testInt = injector.getInstance(Key.get(new TypeLiteral<Test<Integer>>() {})); 
     testInt.action(); 

     Test<String> testString = injector.getInstance(Key.get(new TypeLiteral<Test<String>>() {})); 
     testString.action(); 
    } 

    public static class Test<T> { 
     private final Class<? super T> clazz; 

     @Inject 
     public Test(TypeLiteral<T> literal) { 
      this.clazz = literal.getRawType(); 
     } 

     public void action() { 
      System.out.println(clazz); 
     } 
    } 
} 

난 정말 모르겠어요 왜 getRawType() 반환하지만 Class<? super T>하지 Class<T>.

0

사용

bind(new TypeLiteral<Class<SomeClass>>() {}).toInstance(SomeClass.class); 

는의 생성자에 SomeCLass.class를 주입 Guice을 구성 할 수

Foo<SomeClass>

관련 문제