[java] Guice의 AssistedInject를 사용하는 방법?

https://github.com/google/guice/wiki/AssistedInject를 읽었 지만 AssistedInject 인수의 값을 전달하는 방법은 나와 있지 않습니다. injector.getInstance () 호출은 어떻게 생겼습니까?



답변

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);


답변