Ответ 1
Инъекция может произойти только после строительства просто потому, что до ее строительства нет подходящей цели инъекции. Представьте себе следующий фиктивный пример:
UserInfoBean userInfoBean;
UserDao userDao = new UserDao();
userInfoBean.setDao(userDao); // Injection takes place.
userInfoBean = new UserInfoBean(); // Constructor invoked.
Это технически просто невозможно. В действительности происходит следующее:
UserInfoBean userInfoBean;
UserDao userDao = new UserDao();
userInfoBean = new UserInfoBean(); // Constructor invoked.
userInfoBean.setDao(userDao); // Injection takes place.
Вы должны использовать метод, аннотированный с помощью @PostConstruct
для выполнения действий непосредственно после встраивания конструкции и зависимостей (например, Spring beans, @ManagedProperty
, @EJB
, @Inject
и т.д.).
@PostConstruct
public void init() {
this.user = dao.getUserByEmail("[email protected]");
}