在托pipebean构造函数中访问注入的依赖项会导致NullPointerException

我正在尝试将一个DAO作为托pipe属性注入。

public class UserInfoBean { private User user; @ManagedProperty("#{userDAO}") private UserDAO dao; public UserInfoBean() { this.user = dao.getUserByEmail("test@gmail.com"); } // Getters and setters. } 

DAO对象是在创buildbean之后注入的,但在构造函数中是null的,因此引起NullPointerException 。 我怎样才能使用注入托pipe属性初始化托pipe的bean?

注塑只能施工之后进行,因为在施工前没有合格的注塑目标。 想象下面的虚构例子:

 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注解的方法来在构造dependency injection(例如Spring beans,@ @ManagedProperty ,@EJB,@ @ManagedProperty等)之后直接执行动作。

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