reglas - sesiones en jsf
El acceso a la dependencia inyectada en el constructor de beans administrados causa NullPointerException (1)
La inyección solo puede tener lugar después de la construcción, simplemente porque antes de la construcción no hay un objetivo de inyección elegible. Imagine el siguiente ejemplo ficticio:
UserInfoBean userInfoBean;
UserDao userDao = new UserDao();
userInfoBean.setDao(userDao); // Injection takes place.
userInfoBean = new UserInfoBean(); // Constructor invoked.
Esto es técnicamente simplemente imposible. En realidad, lo siguiente es lo que está sucediendo:
UserInfoBean userInfoBean;
UserDao userDao = new UserDao();
userInfoBean = new UserInfoBean(); // Constructor invoked.
userInfoBean.setDao(userDao); // Injection takes place.
Debería utilizar un método anotado con @PostConstruct
para realizar acciones directamente después de la construcción y la inyección de dependencias (por ejemplo, Spring beans, @EJB
, @Inject
, @Inject
, etc.).
@PostConstruct
public void init() {
this.user = dao.getUserByEmail("[email protected]");
}
Intento inyectar un DAO como una propiedad administrada.
public class UserInfoBean {
private User user;
@ManagedProperty("#{userDAO}")
private UserDAO dao;
public UserInfoBean() {
this.user = dao.getUserByEmail("[email protected]");
}
// Getters and setters.
}
El objeto DAO se inyecta después de que se crea el bean, pero es null
en el constructor y, por lo tanto, causa la NullPointerException
. ¿Cómo puedo inicializar el bean administrado usando la propiedad administrada inyectada?