JPA、CDI 和 JSF 的框架和规范
Frameworks and specification for JPA, CDI and JSF
我已阅读并了解 JPA、JSF、CDI 只是规范。如:
- JPA - [Hibernate、Toplink]、JSR-000338
- CDI - [Spring - Google Guice、PicoContainer]、JSR299
- JSF - [Primefaces、IceFaces、RichFaces]、JSR-000314
那么,如果它们只是论文中的规范,为什么包装上写着 "javax.persistence..."、“javax.faces”?
我认为 Oracle 说:这是这篇论文,规则在哪里。如果你想实现它你必须使用我的包名("javax.persistence...",“javax.faces.”),作为报酬,你可以添加更多的功能,你可以把你自己的包用于扩展功能?
另外,如果我研究规范(jpa,cdi,jsf),我可以使用任何框架吗?甚至,在没有它们的情况下构建我的软件?
请解释一下。
此致。
首先,Spring 和 Guice(也不是 PicoContainer,AFAIK)都不是 CDI 实现。 JBoss Weld 是一个 CDI 实现。
其次。规范不仅仅是一张纸。它也是一组接口和 类,每个实现都必须正确实现或扩展,或者甚至包含不依赖于实现的核心功能(例如,参见 Persistence)。这些接口和 类 是 javax 包中的接口。它们是规范本身的一部分,实现可能不会修改它们。
标准的想法确实是依靠规范中描述的规则,您应该能够使用实现规范的任何框架。但请注意,有些部分有时未指定,并且即使没有错误,实现也可以做一些不同的事情。
从理论上讲,在没有实现的情况下实现您的软件是可能的,只要您的软件的用户选择了它想要的实现。但这是非常不现实的:您将 必须 来测试您的软件,从而为您的测试选择一个实现。如果您计划支持该规范的多个实现,您将必须使用所有这些来测试您的软件,甚至可能需要进行调整。
我已阅读并了解 JPA、JSF、CDI 只是规范。如:
- JPA - [Hibernate、Toplink]、JSR-000338
- CDI - [Spring - Google Guice、PicoContainer]、JSR299
- JSF - [Primefaces、IceFaces、RichFaces]、JSR-000314
那么,如果它们只是论文中的规范,为什么包装上写着 "javax.persistence..."、“javax.faces”?
我认为 Oracle 说:这是这篇论文,规则在哪里。如果你想实现它你必须使用我的包名("javax.persistence...",“javax.faces.”),作为报酬,你可以添加更多的功能,你可以把你自己的包用于扩展功能?
另外,如果我研究规范(jpa,cdi,jsf),我可以使用任何框架吗?甚至,在没有它们的情况下构建我的软件?
请解释一下。
此致。
首先,Spring 和 Guice(也不是 PicoContainer,AFAIK)都不是 CDI 实现。 JBoss Weld 是一个 CDI 实现。
其次。规范不仅仅是一张纸。它也是一组接口和 类,每个实现都必须正确实现或扩展,或者甚至包含不依赖于实现的核心功能(例如,参见 Persistence)。这些接口和 类 是 javax 包中的接口。它们是规范本身的一部分,实现可能不会修改它们。
标准的想法确实是依靠规范中描述的规则,您应该能够使用实现规范的任何框架。但请注意,有些部分有时未指定,并且即使没有错误,实现也可以做一些不同的事情。
从理论上讲,在没有实现的情况下实现您的软件是可能的,只要您的软件的用户选择了它想要的实现。但这是非常不现实的:您将 必须 来测试您的软件,从而为您的测试选择一个实现。如果您计划支持该规范的多个实现,您将必须使用所有这些来测试您的软件,甚至可能需要进行调整。