我不明白
java如何知道任何规范的实现..
例如,我有一个带有JSF的Spring应用程序,如果我将Mojarra jar放在类路径上,应用程序可以工作,但我没有做任何事情,只是将它添加到类路径,所有没有配置
如果我取出Mojarra jar,那么我的应用程序不起作用.
甚至,它如何能够在没有任何变化的情况下区分Mojarra或MyFaces?
我只想知道Java如何找到实现,而不是为什么如果我拿出罐子它不起作用;)
最佳答案 通常Java规范类分为两部分:
> API部分(jar),主要包含通常由规范人员提供的接口.
>包含这些接口的实现的实现部分(jar).
上面的一个例子是JDBC:javax.sql.*类由sun / oracle提供,但实现是在每个db供应商提供的JDBC驱动程序中完成的.在这种情况下,需要某种配置才能将API“映射”到其实现,因为您只使用API类.
你的JSF示例有点不同,Mojarra和MyFaces都包含来自javax.faces.*包的API类,基本上有不同的类具有相同的名称.因此不需要配置,这两个类在两个库中都具有相同的名称,并且只要需要从类路径中的Mojarra或MyFaces jar中加载类加载器.