Mi comprensión de Guice es que:Guice: implicaciones de la inyección campo
- inyección de constructor de nivel (
@Inject public class Widget(Dep one, Dep two)
) implica que Guice siempre va a inyectar ese constructor cada vez que se invoca a través de unInjector
; y - inyección a nivel de método (
@Inject public void setDepOne(Dep one)
) implica que Guice siempre va a inyectar este método cada vez que se llama, siempre y cuando el objetoWidget
se ha creado usando el GuiceInjector
Son estas dos hipótesis correcta? Si no, aclara!
Así que lo que colgué es: ¿Cuáles son las implicaciones de la inyección a nivel de campo?
@Inject private Dep one;
¿Quiere decir esto que Guice siempre va a inyectar la propiedad cuando se crea el objeto a través del inyector Guice? En ese caso, me imagino que entra en conflicto con la inyección de nivel de constructor.
Por ejemplo, hace lo siguiente causar un conflicto/error:
public class Widget {
@Inject private Dep one;
private Dep two;
// Dep one already injected as a field!
@Inject public Widget(Dep one, Dep two) {
// ...
}
}
Gracias de antemano!
Guice siempre creará una nueva instancia de cada dependencia que inyecte a menos que encuentre algún otro enlace, como singleton. – logan
¿Puedes explicar por qué no es bueno para las pruebas? – suitianshi
En este caso, los campos inyectados son privados, lo que dificulta su acceso sin usar algo parecido a la reflexión. –