首页 > 解决方案 > 为什么有些 Java EE API 是在 Java SE 中实现的?

问题描述

我最近注意到一些 API 应该是 Java EE 的一部分,但似乎是在 Java SE 中实现的。例如,有 JAX-WS,它是一个 Java EE API,但可以完全在 Java SE 项目中使用。

有什么我做错了吗?有一些来自 Java EE 的 API 开箱即用地在 Java SE 中实现?我在哪里可以找到有关 JSE 中可用的 JEE API 的信息?

标签: javajakarta-ee

解决方案


Java SE API 基本上是 Java 标准库。Java Platform Docs上有一个很好的图表

这里是“基础库”的列表:https ://docs.oracle.com/javase/8/docs/technotes/guides/index.html#langutil

其中包括java.lang,数学,集合,反射,并发,日志,首选项,io,net ....(请注意,其中许多甚至没有被 Java 社区广泛使用,例如日志 - 其中 slf4j-api 是 de-factor标准)。

然后,还有“集成库”,包括诸如 JDBC(数据库访问)和 JNDI(诸如 LDAP)之类的东西,以及“用户界面库”(以前是 Swing 和 JavaFX,但现在它只回到了 Swing)。

Java EE API包括许多其他东西,如您提到的电子邮件和 JAX-RS,它们扩展了 Java 库,理论上应该在 SE API 之上交互和工作,提供适合企业开发的综合整体。

它们不是由 JavaSE 运行时实现的!

但是,每个 JavaEE API 都可以由独立的组织(或任何有足够空闲时间花在工作上的人)独立实现,并且可以在大多数 Java SE 应用程序中单独使用。这就是为什么有很多实现 Servlet API 的 Servlet 容器(Tomcat、Jetty、GlassFish 和许多其他容器)可用的原因,而其他的不多!

值得注意的是,最近,JavaEE 已正式成为JakartaEE项目。这里有一个可搜索的项目列表。

我还想提一下,OSGi 联盟在OSGi世界中与 JavaEE 并行开发了另一组 API,专注于动态 Java 应用程序的模块化。

最后,作为一个竞争框架,Spring在 Java 世界中相当占主导地位(实际上对 JavaEE 本身的开发产生了很大影响),即使在今天,像Spring Boot这样对初学者友好的项目可能比 JavaEE 本身更受欢迎!

我自己,我喜欢只使用 Java SE、一些 EE API,如 Servlet 和 JDBC 编辑:jdbc 在标准库中!),以及社区驱动的项目(例如MicronautVert.x)很酷的东西,根本不基于任何标准!

总之,Java 世界很大,种类繁多!JavaEE 只是其中的一小部分。


推荐阅读