首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的所有内容都是抽象的吗?

java中的所有内容都是抽象的吗?
EN

Stack Overflow用户
提问于 2015-04-19 13:14:21
回答 2查看 214关注 0票数 2

我对java很陌生,理解java是如何实现的有一些困难。根据我所使用的资源,我所理解的是JAVA只是一组规范,而应用服务器才是这些规范的真正实现。

这是否意味着甲骨文的架构师刚刚想出了设计(只是框架:接口、抽象类、类)和应用服务器(Glassfish,WebLogic)程序员在实际代码中实现了这一点?

java中的所有内容都只是规范吗?

那JPA,JAX-RS呢?这是否意味着应用服务器供应商没有为这些规范实现代码?如果是,这是否也意味着应用程序服务器供应商选择了规范的子集,并在实际代码中实现了它,并留下了其他一些规范供其他供应商实现?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-20 07:50:43

除了漂亮的“JoD.‘”他的回答,很少有其他的想法:

JAVA只是规范的集合,应用服务器才是这些规范的真正实现。

一点儿没错。

这是否意味着甲骨文公司的建筑师们刚刚想出了这个设计。

准确地说,Sun的建筑师:)

那JPA,JAX-RS呢?这是否意味着应用服务器供应商没有为这些规范实现代码?

不是的。为了与Java兼容,每个应用服务器都应该实现所有的规范。它们是如何实现的,这是厂商特有的。例如,WildFly的JPA实现是Hibernate,但是Glassfish使用EclipseLink。它们都是JPA的超集,因此,如果您只使用实现JPA的类,则可以确定您的应用程序可以部署在各种应用程序服务器上,而不需要任何其他操作。但是,如果您使用来自例如org.eclipse.persistence.*包的类,那么您将无法在WildFly上部署,除非您与应用程序一起提供EclipseLink实现。

票数 2
EN

Stack Overflow用户

发布于 2015-04-19 20:33:07

抽象接口(API)

抽象接口允许您将代码编译到类/jar/war中,而无需知道或需要部署到的服务器上的确切实现。抽象接口通常由一个标准(JEE,JCP)组成。

通常,这些接口被打包到库中,这些库只在编译时使用(确保代码可以编译),而不将它们包含在war发行版中。在运行时,在服务器上,我们将使用任何已经可用并预先安装的内容.

使用maven依赖项,这是通过提供provided作用域来完成的,从而导致库被排除在打包(war文件)之外。

接口通常被命名为*-api,类似于java.faces-api-2.2.jar

Implementation

在服务器端,我们通常已经使用一个实际的实现作为Application的一部分提供了库。这是一个标准的实施。

通过将带有抽象接口(标准)的库与具有特定实现的库分离开来,您将避免针对特定于供应商的API进行编译。

如果缺少实现,您可以选择在服务器上手动安装它(将jar复制到正确的位置),或者使用runtime作用域将其作为maven依赖项提供。在这种情况下,Maven将使库成为打包(war)的一部分,但绝不会针对它们进行编译。在这种情况下,您仍然将使用provided作用域提供api。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29730339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档