Вот пример вопроса я сталкивался:Guice: нагнетание параметр, используемый при реализации абстрактного метода
public interface IFoo { ... }
public abstract class Helper implements IFoo {
public Helper() { ... }
protected abstract X helperMethod();
}
public class Foo extends Helper {
private final String aaa;
@Inject
public Foo(String aaa) { this.aaa = aaa; }
@Override
X helperMethod() { doSomethingUsingWhatsInjected(aaa); }
}
Вопрос заключается в том, что, когда я связываю IFoo к Foo, как это:
bind(IFoo.class).to(Foo.class).in(Singleton.class);
это выглядит как helperMethod()
вызывается до того, как aaa
было Введенный, поскольку я вижу, как aaa
null
. Но если я вместо этого не использую класс Helper
и в строке всего его кода непосредственно в Foo
, то он не будет бороться.
В чем разница между этими двумя подходами? Почему helperMethod()
называется до того, как мы узнаем, откуда мы получаем реализацию IFoo
? Можем ли мы использовать Helper
вместе с инъекцией?
Вы точно верны. Я проверил, и я * * вызываю 'helperMethod()' из конструктора 'Помощника'. Я ошибочно пропустил эту деталь, когда написал свой пример. Это отвечает на мой вопрос, спасибо! – apolune