Я использую CDI в контексте Vaadin, но это не имеет значения для моего вопроса: Как правило, лучше вводить объекты внутри конструктора или непосредственно в качестве переменной-члена? Особенно, если эти объекты должны быть дополнительно настроены для работы компонента.Инициализировать CDI впрыснутые компоненты в конструктор или пост-метод?
Далее показаны две различные возможности: КДИ
@UIScoped
public class MyMenuBar extends CustomComponent {
@Inject @New private Label label;
@Inject @New private MenuBar menuBar;
@PostConstruct
private void init() {
//set label text, define menu entries
setCompositionRoot(menuBar);
}
}
@UIScoped
public class MyMenuBar extends CustomComponent {
private Label label;
private MenuBar menuBar;
@Inject
public MyMenuBar(@New Label label, @New MenuBar menuBar) {
//set label text, define menu entries
setCompositionRoot(menuBar);
}
}
Есть ли лучшая практика? Почему нужно выбирать один вариант над другим? Или это вопрос личного выбора?
Итак, если я @Inject все объекты и прочее, которые будут использоваться в этом классе, мне, вероятно, не нужен конструктор? – membersound
Я не уверен, что вы имеете в виду; я говорю, что * если * у вас есть поля '@ Inject'ed, они будут введены в метод' @ PostConstruct'. Единственными зависимостями, которые доступны в конструкторе, являются аргументы конструктора '@ Inject'ed. –