java - Java如何找到规范实现?

标签 java specifications

我不明白 java 如何知道任何规范的实现..

例如,我有一个带有 JSF 的 Spring 应用程序,如果我将 Mojarra jar 放在类路径上,该应用程序可以运行,但除了将它添加到类路径之外我什么也没做,所有这些都没有配置

如果我取出 Mojarra jar,我的应用程序将无法运行。

甚至,它如何在不做任何更改的情况下区分 Mojarra 或 MyFaces?

我只是想知道 Java 是如何找到实现的,而不是为什么如果我取出 jars 它就不起作用 ;)

最佳答案

通常 Java 规范类分为两部分:

  1. 一个 API 部分 (jar),主要包含通常由规范人员提供的接口(interface)。
  2. 包含这些接口(interface)的实现的实现部分(jar)。

上面的一个例子是JDBC:javax.sql.*类是由sun/oracle提供的,但是实现是在各自提供的JDBC驱动中完成的数据库供应商。在这种情况下,需要某种配置才能将 API“映射”到它的实现,因为您仅使用 API 类。

您使用 JSF 的示例有点不同,因为 MojarraMyFaces 都包含来自的 APIjavax.faces.*包,基本上都是同名的不同类。因此不需要配置,类在两个库中具有相同的名称,并且在需要时由类加载器从 MojarraMyFaces jar 中加载,无论哪个在类路径。

关于java - Java如何找到规范实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16287064/

相关文章:

C++ 就地构造和后续销毁 : how do I get the right pointer?

java - 无论应用程序处于什么状态,都获取设备的位置始终从我的公司应用程序中检测位置

java - 在 Java 中,您可以浏览嵌套 zip 文件的内容而不膨胀父文件吗?

java - 为什么 CriteriaBuilder 不能像 camelcase 那样工作

渲染新行的 HTML 规范?

opengl - 与片段着色器中的所有顶点不同,没有插值。为什么不?

java - 数据库 vs Solr vs 图形 DB(Neo4j)

java - org.hibernate.MappingException : Unknown entity: annotations. 用户

java - 无法启动 Tomcat 服务器。使用 Java 1.7 编译。使用 JSF 2.0。给出 UnsupportedClassVersionError : com/sun/faces/config/FacesInitializer

html - 谁发明了 zen 编码,是否有已发布的规范?