我不明白 java 如何知道任何规范的实现..
例如,我有一个带有 JSF 的 Spring 应用程序,如果我将 Mojarra jar 放在类路径上,该应用程序可以运行,但除了将它添加到类路径之外我什么也没做,所有这些都没有配置
如果我取出 Mojarra jar,我的应用程序将无法运行。
甚至,它如何在不做任何更改的情况下区分 Mojarra 或 MyFaces?
我只是想知道 Java 是如何找到实现的,而不是为什么如果我取出 jars 它就不起作用 ;)
最佳答案
通常 Java 规范类分为两部分:
- 一个 API 部分 (jar),主要包含通常由规范人员提供的接口(interface)。
- 包含这些接口(interface)的实现的实现部分(jar)。
上面的一个例子是JDBC:javax.sql.*
类是由sun/oracle
提供的,但是实现是在各自提供的JDBC驱动中完成的数据库供应商。在这种情况下,需要某种配置才能将 API“映射”到它的实现,因为您仅使用 API
类。
您使用 JSF
的示例有点不同,因为 Mojarra
和 MyFaces
都包含来自的 API
类javax.faces.*
包,基本上都是同名的不同类。因此不需要配置,类在两个库中具有相同的名称,并且在需要时由类加载器从 Mojarra
或 MyFaces
jar 中加载,无论哪个在类路径。
关于java - Java如何找到规范实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16287064/