https://github.com/google/guice/wiki/AssistedInject를 읽었 지만 AssistedInject 인수의 값을 전달하는 방법은 나와 있지 않습니다. injector.getInstance () 호출은 어떻게 생겼습니까?
https://github.com/google/guice/wiki/AssistedInject를 읽었 지만 AssistedInject 인수의 값을 전달하는 방법은 나와 있지 않습니다. injector.getInstance () 호출은 어떻게 생겼습니까?
답변:
FactoryModuleBuilder 클래스 의 javadoc을 확인하십시오 .
AssistedInject
Factory
클래스를 직접 코딩하는 대신 동적으로 구성 할 수 있습니다 . 이는 삽입해야하는 종속성이있는 개체와 개체 생성 중에 지정해야하는 일부 매개 변수가있는 경우에 유용합니다.
문서의 예는 RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
그보기 CreditService
및 AuthService
인스턴스 생성시 개발자가 지정되어야하지만, 용기의 startDate 및 양만큼 주입한다.
따라서를 주입하는 대신 다음과 같이 표시된 매개 변수를 Payment
주입합니다 .PaymentFactory
@Assisted
RealPayment
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);
RealPayment
위해 인터페이스를 구현할 필요가 없습니다.