2014-07-26 3 views
1

guice를 사용하여 자식 클래스를 인스턴스화하는 동안 부모 클래스에 종속성을 주입하려고합니다. 아래 예제에서는 Guer를 사용하여 런타임 중에 TelemetryServiceClient을 주입 할 수 있기를 원할 때 TrainingCommandData의 인스턴스를 만들려고합니다. 어떻게해야합니까?Guice를 사용하여 자식 클래스에 의존성 주입

public class TrainingCommandData extends CommandData { 

    private Intent intent; 

    public TrainingCommandData(UserCommandResource userCommandResource, Intent intent) { 
     super(userCommandResource); 
     this.intent = intent; 
    } 
} 

public class CommandData { 

    private TelemetryServiceClient telemetryServiceClient; 
    private UserCommandResource userCommandResource; 

    @Inject 
    public void setTelemetryServiceClient(TelemetryServiceClient telemetryServiceClient) { 
     this.telemetryServiceClient = telemetryServiceClient; 
    } 

    public CommandData(UserCommandResource userCommandResource) { 
     this.userCommandResource = userCommandResource; 
    } 
} 

답변

2

클래스를 확장하면 guice가 부모 종속성의 주입을 처리합니다. 그러면 Guice가 TrainingCommandData 인스턴스를 생성하고 자동으로 TelemetryServiceClient를 주입하도록합니다.

  1. 당신이 당신의 기본이 아닌 생성자에 "@Inject를"둘 필요가 ... 물론 guice 당신을위한 모든 매개 변수를 생성 할 수 있어야합니다

    가 위의 코드와 몇 가지 문제가 있지만입니다 . 런타임시 이러한 매개 변수 만 사용하는 경우 도움을주는 주입 확장을 살펴보십시오

  2. 사용 사례에서 setter 주입을 사용하는 것은 좋은 선택이 아닙니다. 명령 데이터에서 다음과 같은 경우를 설정할 수 있다고 제안해야합니다. 런타임시 서비스? 나는 setter를 제공하지 않지만 필드 주입을 사용하거나, 그렇지 않으면 생성자 주입을 사용합니다.