在托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"); }