java - provides - guice vs spring
¿Cómo usar el AssistedInject de Guice? (1)
Compruebe el javadoc de la clase FactoryModuleBuilder .
AssistedInject
permite configurar Factory
de forma dinámica para Class en lugar de codificarlo usted mismo. Esto a menudo es útil cuando tienes un objeto que tiene una dependencia que se debe inyectar y algunos parámetros que se deben especificar durante la creación del objeto.
El ejemplo de la documentación es un RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
Ver que CreditService
y AuthService
deben inyectar por contenedor, pero startDate y amount deben ser especificados por un desarrollador durante la creación de la instancia.
Entonces, en lugar de inyectar un Payment
, está inyectando una PaymentFactory
con parámetros marcados como @Assisted
en RealPayment
public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
Y una fábrica debe ser atada
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
La fábrica configurada se puede inyectar en tus clases.
@Inject
PaymentFactory paymentFactory;
y usado en tu código
Payment payment = paymentFactory.create(today, price);
He leído https://github.com/google/guice/wiki/AssistedInject , pero no dice cómo pasar los valores de los argumentos de AssistedInject. ¿Cómo se vería la llamada injector.getInstance ()?