加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

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

发布时间:2020-05-23 06:01:50 所属栏目:程序设计 来源:互联网
导读:我试图注入一个DAO作为托管属性. public class UserInfoBean { private User user; @ManagedProperty(#{userDAO}) private UserDAO dao; public UserInfoBean() { this.user = dao.getUserByEmail(

我试图注入一个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");
}

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读