jsf – 访问托管bean构造函数中注入的依赖关系导致NullPointerException

前端之家收集整理的这篇文章主要介绍了jsf – 访问托管bean构造函数中注入的依赖关系导致NullPointerException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图注入一个DAO作为托管属性.
  1. public class UserInfoBean {
  2.  
  3. private User user;
  4.  
  5. @ManagedProperty("#{userDAO}")
  6. private UserDAO dao;
  7.  
  8. public UserInfoBean() {
  9. this.user = dao.getUserByEmail("test@gmail.com");
  10. }
  11.  
  12. // Getters and setters.
  13. }

创建bean后注入DAO对象,但在构造函数中为空,因此导致NullPointerException.如何使用注入的托管属性初始化托管bean?

注射只能在施工后进行,因为在施工前没有合格的注射目标.想象下面的虚构例子:
  1. UserInfoBean userInfoBean;
  2. UserDao userDao = new UserDao();
  3. userInfoBean.setDao(userDao); // Injection takes place.
  4. userInfoBean = new UserInfoBean(); // Constructor invoked.

这在技术上根本是不可能的.在现实中,发生了以下事情:

  1. UserInfoBean userInfoBean;
  2. UserDao userDao = new UserDao();
  3. userInfoBean = new UserInfoBean(); // Constructor invoked.
  4. userInfoBean.setDao(userDao); // Injection takes place.

您应该使用注释为@PostConstruct方法在构建和依赖关系注入之后直接执行操作(例如,Spring beans,@ManagedProperty,@EJB,@Inject等).

  1. @PostConstruct
  2. public void init() {
  3. this.user = dao.getUserByEmail("test@gmail.com");
  4. }

猜你在找的设计模式相关文章