2012-05-31 4 views
2

먼저, 제 제목에 더 구체적인 문구를 표시하지 못해 죄송합니다.상속받은 Guice 주사

public abstract class A { 
// dependencies 
private Client client; 

@Inject 
public A(Client client) { 
    this.client = client; 
} 

public abstract foo(); 

protected void bar() { 
    client.bar(); 
} 
} 

public class B extends A { 
... 
} 

public class C extends A { 
... 
} 

내 문제는 이것이다 : BC 어느 실제로 boo 방법은 A에서 구현하는 방법을 걱정 여기 내 코드입니다. Aboo 구현에만 client을 사용합니다. 나는 BC의 생성자를 통해 client을 계속 주입하고 싶지 않습니다. 내 옵션은 무엇입니까? 나는 어노테이션을 생성자 대신에 client 필드 선언에 직접 사용할 수 있다고 생각한다. 이것은 좋은 접근 방법입니까? 다른 추천 방법이 있습니까? 아니면 나는 여기 DI에 대해 뭔가를 오해하고 있는가? 사전에

감사합니다, Bhargava 내가 최근에 사용하기 시작

+0

에 그것은 필드에 Inject' @'사용하는 것이 정상입니다있어. – yatul

+0

@yatul 감사합니다! 그거 알아두면 좋을거야. – Bhargava

+2

나는 필드에'@Inject'를 피하는 것을 선호한다. 주입 할 수있는 가장 간단한 방법입니다. 나는 생성자 매개 변수를 여기저기서 추가한다고하더라도 생성자를 유지하는 것을 선호합니다. –

답변

-1

한 패턴은 자식 클래스는 부모 클래스를 (명백하게) 상속하고, 또한 그것을 주입하는 것입니다. 부모 클래스는 복사 생성자를 필요로하고 추상 수 없습니다 :

class A { 
    private Client client; 

    @Inject 
    public A(Client client) { 
    this.client = client; 
    } 

    public A(A other) { 
    this(other.client); 
    } 
} 

class B extends A { 
    @Inject 
    public Child(A a, Others others) { 
    super(a); 
    } 
} 

A의 의존성이를 유지하고, B의 종속성 B.

관련 문제