我试图注入一个DAO作为托管属性.
- public class UserInfoBean {
- private User user;
- @ManagedProperty("#{userDAO}")
- private UserDAO dao;
- public UserInfoBean() {
- this.user = dao.getUserByEmail("test@gmail.com");
- }
- // Getters and setters.
- }
创建bean后注入DAO对象,但在构造函数中为空,因此导致NullPointerException.如何使用注入的托管属性初始化托管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
的方法在构建和依赖关系注入之后直接执行操作(例如,Spring beans,@ManagedProperty,@EJB,@Inject等).
- @PostConstruct
- public void init() {
- this.user = dao.getUserByEmail("test@gmail.com");
- }