Ответ 1
Я пытался ответить на этот же вопрос. Я думаю, что я приблизился к тому, как это "должно" работать идеально, но я просто держусь за проект GitHub и пытаюсь понять его на основе обрывов информации там, так как большая часть документации для Dagger 2 по-прежнему (на этой неделе).
Мой примерный код ниже для Android-активности, но я считаю, что этот же подход должен работать на сервлет, о котором вы просите.
Добавить MemberInjector <... > в ваш интерфейс @Component; например, в следующем компоненте я добавил один для моего класса MainActivity:
package ...;
import javax.inject.Singleton;
import dagger.Component;
import dagger.MembersInjector;
@Singleton
@Component(modules = { PlaygroundModule.class })
public interface MainComponent {
Wizard createWizard();
MembersInjector<MainActivity> mainActivityInjector();
}
И затем в своем классе, который вы хотите вводить в члены, в подходящем месте после создания объекта, но прежде чем вам нужно будет использовать введенных членов, вам необходимо создать компонент и использовать инъекцию члена:
package ...;
// other imports
import javax.inject.Inject;
import dagger.MembersInjector;
public class MainActivity extends ActionBarActivity {
@Inject
Wizard wizard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainComponent c = DaggerMainComponent.create();
c.mainActivityInjector().injectMembers(this);
// other code...
}
}
Единственное, что я не понимаю, - это правильная модель создания компонента внутри объекта, который должен быть впрыснут. Это не совсем правильно, но он все еще очень гибкий, поскольку вы привязываетесь только к компоненту, а не к модулю. Так что, возможно, это правильный подход, но, возможно, это немного не работает.