我试图注入DAO作为托管属性。
public class UserInfoBean {
private User user;
@ManagedProperty("#{userDAO}")
private UserDAO dao;
public UserInfoBean() {
this.user = dao.getUserByEmail("test@gmail.com");
}
// Getters and setters.
}
创建豆之后,DAO对象被注入,但它是null
的构造函数,因此导致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 Bean中,后直接@ManagedProperty
, @EJB
, @Inject
等)。
@PostConstruct
public void init() {
this.user = dao.getUserByEmail("test@gmail.com");
}
文章来源: Accessing injected dependency in managed bean constructor causes NullPointerException