天天看点

Java SE、Java EE 与 Spring

JavaSE、JavaEE 与Spring的概念

在Java世界中,很多人都对Java SE、J2EE、Java EE、Spring、EJB等这些术语感到困惑。

什么是Java SE

  • 可以说这是Java的核心。(主要部分)
  • 用于开发桌面应用程序和基于web的应用程序。
  • 它提供了从基本对象到高级类的所有东西,这些类被用于网络、数据库访问、安全、XML解析、GUI开发。
  • 除了这些核心api之外,它还提供了虚拟机(JVM)、开发工具、部署技术等
Java SE、Java EE 与 Spring

什么是Java EE

  • Java EE是一个抽象的规范。
  • 具体实现称为应用服务器(如GlassFish、WildFly、WebLogic)。
  • 当您从Oracle站点下载Java EE时,它将给您提供大量文档和示例的GlassFish服务器。因此,它们只是提供了Java Enterprise Edition规范的实现。
  • 您还可以使用其他的实现,比如RedHat WildFly,它也遵循这些规范。
  • 因此,J2EE是1999年到2003年Java EE的抽象规范的版本名称。
  • EJB遵循Java EE规范,所以EJB属于JavaEE。
Java SE、Java EE 与 Spring

什么是Spring

  • Spring遵循“所有”JavaEE规范吗? 严格地说不是
  • Spring是一个独立的框架,它替代并改进了JavaEE的许多部分。
  • 您可以将Spring视为一个集成平台,允许您使用所有JavaEE技术。
  • 这意味着您不一定需要完整的fledge JavaEE应用服务器来支持。
  • 您可以在像Tomcat这样的简单servlet容器上运行它。
  • Spring是一个独立的集成平台(框架),在JavaEE中有改进和替换,也允许您使用JavaEE技术。
Java SE、Java EE 与 Spring

JavaEE 与Spring的区别

Rod Johnson带着他的革命书籍,《J2EE Development without EJB》,描述了新的Spring框架的特性。它就像一股新鲜空气,很快,Spring的直觉依赖注入功能成为了控制反转(IoC)设计模式的实际标准实现。

从那时起,JEE和Spring都在发展,尽管Spring似乎总是在前进。Spring引入的所有最佳功能后来都被“标准”企业Java采纳,包括:

  • Spring IoC在JEE中实现为容器依赖注入(CDI);
  • JEE作为JSR 352实现的Spring批处理:Java平台的批处理应用程序。

公平地说,在Java中很酷的新功能,比如注解,也会导致对Spring的修改。除了在第三次迭代中提供基于注解的配置之外,Spring也变得模块化,至少在一定程度上归功于Maven的巨大流行,它引入了一种解决和管理依赖第三方库的新方法。事实上,JEE和Spring继续相互影响并相互鼓励,比如当JEE 7引入了Web profile的模块化,开发了JAX的开发人员,并促进了更轻量级的企业应用程序。类似地,从Java 8的JCP 335和JCP 310的日期和时间API,在Spring中激发了新的增强。可无论是JEE还是Spring的支持者都倾向于认为它们是相互排斥的。

让我们来看看在一个更平衡的环境中进行比较

Java EE:

  • Java EE行业认可的标准API框架
  • 它主要基于注释和CDI
  • 用于web开发的JFC MVC框架
  • 用于进程数据库操作的JPA实现
  • JTA API和实现
  • 基于EJB容器和POJO的实现
  • Oracle许可证

Spring:

  • 基于IOC和AOP
  • 基于XML配置(现在他们正在利用注释)
  • 使用Spring DAO框架(基于模板设计patter)连接到数据库
  • 提供抽象层以支持各种JTA实现供应商
  • 与不同的Java厂商的不同支持不同的功能,这样容易与struts等集成
  • 提供端到端平台构建web应用程序,实现使用DI和AOP的松散耦合
  • 开放源码许可

Spring的实现重点与JEE的标准化和可移植性

  • SpringSource社区与Java社区过程的主要区别在于其不同的动机。SpringSource的创新来自于解决现实世界问题的需要。解决方案以解决问题为导向,这样下一个步骤和整个项目就可以尽可能快速和顺利地实现。
  • JCP有点像公司。创新和决策与解决方案如何导致标准技术规范相关联。另外,像Oracle、IBM、RedHat甚至SpringSource参与JCP。大多数Java规范请求都需要很长的路径才能实际实现。例如,jsr - 303:Bean验证需要三年才能完成。也许在这个领域,速度并没有那么重要,因为大多数大型企业项目不会经常发生变化,而且会有更长的生命周期。他们甚至可能不想要所有最新的、但未经证实的技术。
  • JEE的另一个论点是可移植性。简而言之,JEE是一组规范。你在你的应用程序中使用的东西可以被拉入你选择的任何JEE兼容的容器中。简单地说,用一些常规的方法来包装业务逻辑,为CRUD操作提供持久性,然后从14个JEE供应商中选择。理想情况下,您应该能够在不同服务器之间移动代码。这有时行得通。首先,现在只有三个供应商支持JEE 7,所以很多都变得无关紧要了。其次,有些实现是特定于供应商的,并且仍然需要时间和资源来让项目在不同的环境中运行。当然,这取决于项目的复杂性。一个简单的示例应用程序将从任何一个开始,但不是一个复杂的。
  • 另一方面,Spring只支持VMWare,它被认为是其他库的包装器,将它们耦合在一起,提供更容易的访问和配置功能——如果您知道如何做到这一点的话。但是Spring应用程序可以在一个成熟的JEE服务器上运行,也可以在轻量级JSP容器中运行,比如Jetty、Tomcat或Netty,避免了巨大的开销。Spring甚至可以在独立模式下运行,因为Spring引导模块可以包装Jetty或Tomcat。

    性能

  • 对JEE与Spring的大多数比较测试都存在缺陷。只有良好的负载和压力测试,以及持续的基准测试才能真正分析应用程序中的瓶颈。事实是,一个或另一个容器可能更适合于任何特定的情况。

学习曲线

当然,无论是Spring还是JEE,学习曲线都是陡峭的。让我们从地面开始。复杂性是感知、经验、知识、情绪、勇气的问题。这一切都不容易,但同样的想法仍然存在于双方——相反的技术是一个复杂的结,它会在你试图解决某一特定任务的时候偷走你的时间。(并不是真的有这样的强硬的Spring或有思想的人:)我发现Spring是逻辑结构,而类名TransactionAwareConnectionFactoryProxyUserCredentialsConnectionFactoryAdapter看起来吓人,他们描述的实现类没有挖掘教程。另一方面,JEE依赖于零散的规范。但是,通过了解应用程序的哪一部分需要理解,您可以在适当的指南中找到它。这两个框架都有大量的例子和指南。最后,Spring和JEE建立在相同的原则之上,以提供Java web应用程序开发的工具。如果您了解基本的软件模式和设计,您将能够了解其中任何一个。