我已阅读并且我已了解JPA,JSF,CDI仅为规格。如:
所以,如果它们只是一篇论文中的规范,为什么包说," javax.persistence ...",“javax.faces。"?
我认为甲骨文说:这是本文的规则。如果你想实现它,你必须使用我的包名(" javax.persistence ..."," javax.faces。"),并且作为付费,你可以添加更多功能,您可以将自己的包放入扩展功能吗?
另外,如果我研究规范(jpa,cdi,jsf),我能用任何框架吗?或者甚至在没有它们的情况下构建我的软件?
请解释一下。
最好的问候。
答案 0 :(得分:3)
首先,Spring和Guice(也不是PicoContainer,AFAIK)都不是CDI实现。 JBoss Weld是一个CDI实现。
二。规范不仅仅是一篇论文。它也是一组接口和类,每个实现必须正确实现或扩展,或者甚至包含不依赖于实现的核心功能(例如,请参阅Persistence)。那些接口和类是javax包中的接口和类。它们是规范本身的一部分,实现可能不会修改它们。
标准的概念确实是依靠规范中描述的规则,您应该能够使用实现规范的任何框架。但要注意,某些部分有时未被指定,即使没有错误,这些实现也可以做一些不同的事情。
只要软件的用户选择所需的实现,理论上就可以实现没有实现的软件。但这是非常不现实的:您将 来测试您的软件,从而为您的测试选择一个实现。如果您计划支持规范的多个实现,则必须对所有这些软件进行测试,甚至可能需要进行调整。