我也是 Struts2 框架和 EJB 的新手。我有一个类 LoginDAO
,它实现了接口(interface) LoginDAOLocal
的 checkUser
方法。我不明白为什么我会在以下场景中看到不同的行为:
如果我使用 EJB(LoginDAO
是无状态 session bean),方法调用可以完美运行,不会出现任何错误。
@EJB
private LoginDAOLocal loginDao;
loginDao.checkUser(userName,password);
如果我按如下方式使用 Struts2,它会为方法调用提供空指针异常。
public class LoginAction extends ActionSupport {
// Getters setters for userName and password)
private LoginDAOLocal loginDao;
loginDao.checkUser(this.userName,this.password);
}
如果我使用简单的 Java 应用程序(无 EJB 或 Struts2),该方法调用会创建一个编译时错误,提示 loginDao 未初始化
public static void main(String[] args) {
LoginDAOLocal loginDao;
loginDao.checkUser(userName,password);
}
有人可以解释为什么会出现这种不同的行为吗?
最佳答案
无需过多了解 Java EE 规范:EJB 由 J2EE 服务器(JBoss\Websphere 等)中存在的 EJB 容器进行管理。容器控制bean的生命周期,并负责根据应用程序的需要创建\销毁bean。
当容器(简单的java应用程序)耗尽时,您的bean将不会被初始化,并且您没有JNDI上下文来获取bean,即使您向字段成员添加@EJB注释也是如此。
关于java - 为什么EJB不需要初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22513393/