为什么有些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的信息?

Java SE API基本上是Java标准库。Java平台文档上有一个很好的图表

以下是"基本库"的列表:https://docs.oracle.com/javase/8/docs/technotes/guides/index.html#langutil

它包括java.lang、数学、集合、反射、并发、日志记录、偏好、io、net。。。。(请注意,其中许多甚至没有被Java社区广泛使用,比如日志记录——其中slf4j-api是去因子标准(。

然后,还有"集成库",包括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(EDIT:JDBC在标准库中!(用于基本功能,以及社区驱动的项目(例如,参见Micronaut和Vert.x(,它们非常酷,根本不基于任何标准!

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

最新更新