Moje rozumienie Guice jest to, że:Guice: implikacje zastrzyku pola
- wtrysk Konstruktor poziomu (
@Inject public class Widget(Dep one, Dep two)
) implikuje że Guice zawsze wstrzykiwać że konstruktor za każdym razem jest ona wywoływana przezInjector
; i - wtrysk Metoda poziomu (
@Inject public void setDepOne(Dep one)
) implikuje że Guice zawsze wstrzykiwać tej metody, kiedy to nazywa, tak długo, jak długo obiektWidget
został stworzony przy użyciu GuiceInjector
Czy te dwa założenia są prawidłowe? Jeśli nie, wyjaśnij!
Więc na co mnie powiesiłam: jakie są implikacje wtrysku na poziomie pola?
@Inject private Dep one;
Czy to znaczy, że Guice zawsze wstrzykiwać właściwość, gdy obiekt jest tworzony przez wtryskiwacz Guice? W takim przypadku wyobrażałbym sobie, że jest to sprzeczne z zastrzykiem poziomu konstruktora.
Na przykład, wykonuje następujące powodować konflikt/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) {
// ...
}
}
Z góry dzięki!
Guice zawsze tworzy nowe wystąpienie każdej zależności, którą wstrzykuje, chyba że znajdzie jakieś inne powiązanie, na przykład singleton. – logan
czy możesz wyjaśnić, dlaczego nie nadaje się do testowania? – suitianshi
W tym przypadku pola wstrzyknięte są prywatne, co utrudnia dostęp bez użycia odbicia. –