2009-12-03 5 views
2

총 Guice 멍청한 여기, 몇 가지 기사를 읽고 그것을 소개 비디오를 보았다.두 개의 다른 생성자가있을 때 Guice를 주입하는 방법은 무엇입니까?

"guicifiy"하려고하는 내 단순화 된 이전 코드는 다음과 같습니다. 방법을 알아낼 수는 없으므로 (이해할 수있는 한) @inject - 두 생성자 중 하나만 주석 처리 할 수 ​​있습니까? 호출 클래스가 어떻게 하나 또는 다른 인스턴스를 만들 수 있습니까? 아니면 어떻게 든 리팩토링해야합니까?

public class MyDialog extends JDialog { 
    public MyDialog(JFrame parent, <other parameters...>) { 
     super(parent); 
    } 

    public MyDialog(JDialog parent, <other parameters...>) { 
     super(parent); 
    } 
} 

답변

4

하나의 코드에만 삽입 할 수 있습니다.

이 클래스를 사용하는 방법에 따라 수 :

  • 는이 "새로운"방법과 클라이언트 코드에 공장을 주입한다.
  • 모든 인수를 하나의 ctor로 롤백하고 필요없는 경우 null을 전달합니다.

어떻게 호출 클래스가 하나 또는 다른 인스턴스를 만들 수 있습니까?

이렇게하면 호출하는 클래스가 MyDialog의 여러 인스턴스를 원할 것입니다. 그런 다음 수동 롤 팩토리를 사용해야합니다 (보조 커서가 하나만있는 경우 Assisted Inject가이를 처리 할 수 ​​있습니다). 당신이 무엇을하고 있는지에 대한 세부 사항을 모르겠다. 이미 알고있는 것을 반복 할 것이지만 블랭킹 된 문장으로 MyDialog에서 인터페이스를 추출하고 공장에서 반환하도록 제안 할 것이다. 이렇게하면 테스트에서 MyDialog를 가짜로 만들 수 있습니다.

1

생성자 주입은 매우 깨끗합니다. mlk는 옳다. 하나의 생성자에만 주입 할 수있다.

public class Smt { 

    private int a; 
    private Cereal cereal; 
    private Personality personality; 
    private ignition; 

    public Smt() { 
     this.a = 5; 
    } 

    public Smt(int a) { 
     this.a = a; 
    } 

    @Inject 
    public void setup(@CiniMini Cereal cereal, @Rastafarian Personality personality, 
     Ignition ignition) { 
     this.cereal = cereal; 
     this.personality = personality; 
     this.ignition = ignition; 
    } 
} 

은 무엇 Guice 할 것 것은 setup 클래스 메소드 클래스 '전화 모든 주사를 제공 할 수 있습니다 : 당신이 할 수있는 일

사용 방법 주입입니다. 그런 다음 생성자에서와 동일한 작업을 수행합니다. 객체를 클래스의 속성에 할당합니다.

0

나는 이전 의견에 동의합니다. 추가 힌트 : 생성자 삽입은 클래스에 필요한 모든 종속성을 제공해야합니다. mlk에서 말한 것처럼, 한 가지 방법은 생성자에 대부분의 인수를 주석으로 추가 한 다음 필요에 따라 null 값을 전달하여 다른 하나를 리팩토링하여 이전을 호출하는 것입니다.
또한, Guice 3.0 프로그래머가 사용할 생성자 지정할 수있는 소위 생성자 바인딩 지원합니다. 자세한 내용은 here을 참조하십시오.

관련 문제