2011-02-25 3 views
7

나는 setter 주입보다 생성자 주입을 사용하는 이점을 이해하지만 어떤 경우에는 setter 기반 주입에만 집중해야합니다. 내 질문은 injector.injectMembers() 메서드를 사용하여 모든 setter 기반 주입 클래스의 멤버를 주입하는 방법입니다.Guice injectMembers 메서드

//I am calling this method in init method of my application 
private static final Injector injector = Guice.createInjector(new A(), new B()); 

//Injecting dependencies using setters of all classes bound in modules A and B 
injector.injectAllMembers()?? 
+1

사용 사례를 증명하는 코드 예제를 제공해 주시겠습니까? –

+0

Guice는 이미 그것을합니다. 실제로 문제가 있습니까? – jabbie

답변

10

왜 수동으로 종속성을 주입해야합니까?

Guice는 필드와 메소드에 의존성을 자동으로 주입합니다. 사용 :

YourClass yourClass = injector.getInstance(YourClass.class); 

Guice 문서 :

Guice는 인스턴스를 생성 할 때마다, 수행이 주입 자동으로 당신이 을 할 수 있다면, 그래서 (첫번째 생성자 주입 수행 한 후) Guice가 당신을 위해 모든 객체를 만들면 이 방법을 사용할 필요가 없습니다.

YourClass yourClass = new YourClass(); 
injector.injectMembers(yourClass); 

아니면 그런 일 사용할 수 있습니다 : 어떤 경우

public class YourClassProvider implements Provider<YourClass> { 

    private final Injector injector; 

    @Inject 
    public YourClassProvider(Injector injector) { 
     this.injector = injector; 
    } 

    public YourClass get() { 

     YourClass yourClass = new YourClass(); 
     injector.injectMembers(yourClass); 

     return yourClass; 
    } 
} 

을, 세터의

당신은이 같은 수동으로 생성 된 인스턴스에 자신에 의해 회원을 주입 할 필요가 YourClass에는 @Inject로 주석을 달아야합니다.

+0

Coz Guice가 해당 클래스의 인스턴스를 만들지 않고 Guice Provider를 사용하여 해당 클래스의 인스턴스를 다른 곳에서 가져옵니다. – Abidi

+0

업데이트 된 답변의 코드를 참조하십시오. 희망이 도움이됩니다. – Pavel

+1

'Injector' 전체가 아니라 'MembersInjector '을 주입하는 것이 좋습니다. – ColinD