JPA、CDI 和 JSF 的框架和规范

Frameworks and specification for JPA, CDI and JSF

我已阅读并了解 JPA、JSF、CDI 只是规范。如:

那么,如果它们只是论文中的规范,为什么包装上写着 "javax.persistence..."、“javax.faces”?

我认为 Oracle 说:这是这篇论文,规则在哪里。如果你想实现它你必须使用我的包名("javax.persistence...",“javax.faces.”),作为报酬,你可以添加更多的功能,你可以把你自己的包用于扩展功能?

另外,如果我研究规范(jpa,cdi,jsf),我可以使用任何框架吗?甚至,在没有​​它们的情况下构建我的软件?

请解释一下。

此致。

首先,Spring 和 Guice(也不是 PicoContainer,AFAIK)都不是 CDI 实现。 JBoss Weld 是一个 CDI 实现。

其次。规范不仅仅是一张纸。它也是一组接口和 类,每个实现都必须正确实现或扩展,或者甚至包含不依赖于实现的核心功能(例如,参见 Persistence)。这些接口和 类 是 javax 包中的接口。它们是规范本身的一部分,实现可能不会修改它们。

标准的想法确实是依靠规范中描述的规则,您应该能够使用实现规范的任何框架。但请注意,有些部分有时未指定,并且即使没有错误,实现也可以做一些不同的事情。

从理论上讲,在没有实现的情况下实现您的软件是可能的,只要您的软件的用户选择了它想要的实现。但这是非常不现实的:您将 必须 来测试您的软件,从而为您的测试选择一个实现。如果您计划支持该规范的多个实现,您将必须使用所有这些来测试您的软件,甚至可能需要进行调整。