Injection can only take place after construction simply because before construction there’s no eligible injection target. Imagine the following fictive example:
UserInfoBean userInfoBean;
UserDao userDao = new UserDao();
userInfoBean.setDao(userDao); // Injection takes place.
userInfoBean = new UserInfoBean(); // Constructor invoked.
This is technically simply not possible. In reality the following is what is happening:
UserInfoBean userInfoBean;
UserDao userDao = new UserDao();
userInfoBean = new UserInfoBean(); // Constructor invoked.
userInfoBean.setDao(userDao); // Injection takes place.
You should be using a method annotated with @PostConstruct
to perform actions directly after construction and dependency injection (by e.g. Spring beans, @ManagedProperty
, @EJB
, @Inject
, etc).
@PostConstruct
public void init() {
this.user = dao.getUserByEmail("[email protected]");
}