我从事 Java SE 已经有几年了,然后转向 Java EE。但是,我在理解 Java EE 的某些方面时遇到了一些麻烦。
Java EE 只是一个规范吗?我的意思是:EJB 是 Java EE 吗?
EJB/Spring 是 Java EE 的不同实现吗?
很抱歉,我很难理解 Java EE 是什么。
谁能解释一下 Java EE 是什么?还有 EJB?
最佳答案
(2022 年 2 月更新)
首先,“Java EE”自 2019 年 9 月起重命名为“Jakarta EE”,从版本 8 开始。历史上,“J2EE”一词也涵盖了 1.2 版,直到1.4.术语“Java EE”涵盖了版本 5 到 8。另见 Jakarta EE, History on Wikipedia .
Is Jakarta EE just a specification? What I mean is: Is EJB Jakarta EE?
Jakarta EE确实是一个抽象规范。任何人都愿意开发和提供工作 implementation的规范。 具体 实现是所谓的应用服务器,如 WildFly , TomEE , GlassFish , Liberty , WebLogic等等。还有一些 servlet 容器只实现了巨大的 Jakarta EE API 的 JSP/Servlet 部分,例如 Tomcat , Jetty等。
我们,Jakarta EE 开发人员,应该使用规范编写代码(即在我们的代码中导入 only jakarta.*
类,而不是实现特定的类,例如 org.jboss.wildfly.*
、com.sun.glassfish.*
等),然后我们就可以在任何实现上运行我们的代码(因此,在任何应用服务器上) )。如果您熟悉 JDBC,它与 JDBC 驱动程序的工作原理基本相同。另见 a.o. In simplest terms, what is a factory?
EJB 是 Jakarta EE 规范的一部分。看,it's in the Jakarta EE API .成熟的 Jakarta EE 应用服务器开箱即用地支持它,但简单的 JSP/Servlet 容器不支持。
另见:
- Where can I find a list of all the reference implementations for Java EE 6?
- Java / Jakarta EE web development, where do I start and what skills do I need?
- What to learn for making Java web applications in Java EE 6?
Are EJB/Spring different implementations of Jakarta EE?
不,如上所述,EJB 是 Jakarta EE 的一部分。 Spring 是一个独立的框架,它替代并改进了 Jakarta EE 的许多部分。 Spring 不一定需要 Jakarta EE 才能运行。像 Tomcat 这样的基本 servlet 容器已经足够了。简单来说,Spring 是 Jakarta EE 的竞争对手。例如。 “Spring”(独立)竞争 EJB/JTA,Spring MVC 竞争 JSF/JAX-RS/MVC,Spring DI/IoC/AOP 竞争 CDI,Spring Security 竞争 JAAS/JASPIC 等。
在旧的 J2EE/EJB2 时代,EJB2 API 的实现和维护都很糟糕。 Spring 是 EJB2 的一个更好的替代品。但是从 EJB3 (Java EE 5) 开始,EJB API 基于从 Spring 中吸取的教训得到了很大改进。自 CDI (Java EE 6) 以来,没有真正的理由再次查看像 Spring 这样的另一个框架,以使开发人员更容易开发服务层。
只有当您使用 Tomcat 之类的基本 servlet 容器并且无法迁移到 Jakarta EE 服务器时,Spring 才更有吸引力,因为在 Tomcat 上安装 Spring 更容易。无法安装,例如Tomcat 上的 EJB 容器,无需修改服务器本身,您基本上就是在重新发明 TomEE。
另见:
关于java - Java EE 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7295096/