Guice의 AssistedInject를 사용하는 방법?


답변:


168

FactoryModuleBuilder 클래스 의 javadoc을 확인하십시오 .

AssistedInjectFactory클래스를 직접 코딩하는 대신 동적으로 구성 할 수 있습니다 . 이는 삽입해야하는 종속성이있는 개체와 개체 생성 중에 지정해야하는 일부 매개 변수가있는 경우에 유용합니다.

문서의 예는 RealPayment

public class RealPayment implements Payment {
   @Inject
   public RealPayment(
      CreditService creditService,
      AuthService authService,
      @Assisted Date startDate,
      @Assisted Money amount) {
     ...
   }
 }

그보기 CreditServiceAuthService인스턴스 생성시 개발자가 지정되어야하지만, 용기의 startDate 및 양만큼 주입한다.

따라서를 주입하는 대신 다음과 같이 표시된 매개 변수를 Payment주입합니다 .PaymentFactory@AssistedRealPayment

public interface PaymentFactory {
    Payment create(Date startDate, Money amount);
}

그리고 공장을 묶어야합니다

install(new FactoryModuleBuilder()
     .implement(Payment.class, RealPayment.class)
     .build(PaymentFactory.class));

구성된 팩토리를 클래스에 삽입 할 수 있습니다.

@Inject
PaymentFactory paymentFactory;

귀하의 코드에 사용

Payment payment = paymentFactory.create(today, price);

8
많이 찾고 내 의심에 대한 더 간결하고 명확한 설명을 찾을 수 없었습니다. 많은 감사
Gabber

18
이것은 Github의 문서보다 이해하기 쉽습니다. 잘 했어.
arjabbar

8
Github 문서는 이것에 비해 쓰레기입니다.
EMM

2
'Payment'에 대한 메서드 호출에서 '날짜'와 '금액'을 전달하면 안 되나요? 생성자에 여기에 삽입해야하는 이유는 무엇입니까?
Harshit

2
궁금한 사람들을 RealPayment위해 인터페이스를 구현할 필요가 없습니다.
jsallaberry 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.