Простой вопрос, но я не могу его решить. Поскольку я знаю, что поля сначала инициализируются и после этого вызывается конструктор.CDI порядок инжекции и конструктор
Следующий код
public class Controller {
@Inject
private ReadCommand readCommand;
public Controller() {
if (readCommand==null){
System.out.println("NO");
}else{
System.out.println("YES");
}
}
}
печатает НЕТ. Но когда я закачиваю в конструктор
@Inject
public Controller(ReadCommand readCommand)
Он печатает ДА. Что я делаю не так?
Спасибо за ваше время. Могу ли я вставлять в myField и получать myField в конструкторе таким образом, чтобы myField уже был инициализирован через контейнер CDI? –
И не могли бы вы объяснить: «Конструктор вызывается много раз во время процесса инъекции». ? –
Вы не можете получить его в конструкторе. Вы можете использовать обратный вызов @ @ PostConstruct из контейнера для выполнения инициализации после завершения инъекции. Конструктор может быть вызван несколько раз, поскольку объект, с которым вы имеете дело, является прокси-сервером. Обычно это не проблема для людей. –