java - 为什么EJB不需要初始化?

标签 java jakarta-ee struts2

我也是 Struts2 框架和 EJB 的新手。我有一个类 LoginDAO ,它实现了接口(interface) LoginDAOLocalcheckUser 方法。我不明白为什么我会在以下场景中看到不同的行为:

如果我使用 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/

相关文章:

java - 游戏开发,给Java/Scala程序员的新手建议

java - 检测扫描仪是否没有下一个

java - Maven API 搜索不检索 Google 依赖项

validation - 关于在一个字段上使用 FacesValidator(JSF 验证)和 Bean 验证的问题

java - 支柱 2 <s :if> tag How to get action name to be evaluated in jsp

java - 使用 Hibernate、Spring、Struts 2 在 View 模式中打开 session

java - 获取Android中任何文件的真实文件路径

java - 从 Java 6 SE 迁移到 Java 6 EE

java - 按元素对列表项进行分组以在 jsp 收据中使用

java - 从 s :select inside an iteration 获取值