gpt4 book ai didi

jsf - 访问托管 bean 构造函数中的注入(inject)依赖项会导致 NullPointerException

转载 作者:行者123 更新时间:2023-12-03 04:39:25 26 4
gpt4 key购买 nike

我正在尝试将 DAO 作为托管属性注入(inject)。

public class UserInfoBean {

private User user;

@ManagedProperty("#{userDAO}")
private UserDAO dao;

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

// Getters and setters.
}

创建 bean 后注入(inject) DAO 对象,但它在构造函数中为 null,因此导致 NullPointerException。如何使用注入(inject)的托管属性初始化托管 bean?

最佳答案

注入(inject)只能在施工之后进行,因为在施工之前没有合格的注入(inject)目标。想象一下以下虚构的例子:

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 注释的方法在构造依赖注入(inject)之后直接执行操作(例如通过 Spring beans、@ManagedProperty@EJB@Inject 等)。

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

关于jsf - 访问托管 bean 构造函数中的注入(inject)依赖项会导致 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10196982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com