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

前端之家收集整理的这篇文章主要介绍了jsf – 访问托管bean构造函数中注入的依赖关系导致NullPointerException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图注入一个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");
}

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