JavaRush /Java 博客 /Random-ZH /关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较

关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较

已在 Random-ZH 群组中发布
你好!目前,对于了解Java的开发人员来说,最流行的开发方向是Web开发。当然,对于这个专业,需要学习一系列技术。主要的之一是Spring您可能会说您可以学习Java关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 1 EE 。当然,这是事实,但现在绝大多数新项目都使用Spring,这使其几乎成为 Java Web 开发人员默认的强制技术。如果你想跟上市场的需求,你就必须研究它。今天我想谈谈Spring,即稍微扩展一下您对它的视野:谈谈它的创建历史、与Java EE堆栈的主要区别,并简要概述Spring堆栈的关键组件。让我们开始吧! 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 2

1. Spring 是如何、何时出现的,以及随着时间的推移它演变成了什么

这一切都始于2002 年 10 月,当时 Rod Johnson 写了《专家一对一 J2EE 设计与开发》一书: 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 3在这本由Wrox出版的书中,作者描述了当时企业 Java 开发的状态,并指出了一些问题Java EE和基于组件的(企业 Java Bean)EJB的缺点。同时,Rod Johnson 提出了一种基于常规 Java 类(POJO - 普通的旧 Java 对象)和依赖注入的更简单的解决方案。在书中,他解释了如何在不使用 EJB 的情况下创建高质量、可扩展的在线预订应用程序。那些。他清楚地演示了如何消除应用程序开发的复杂性,并使使用简单的 JavaBean 实现以前只能使用 EJB 才能实现的一切成为可能。然而, Spring的范围并不限于开发运行在服务器端的软件组件。任何 Java 应用程序都可以利用该框架在简单性、可测试性和松散耦合方面的优势。他的J2EE开发设计一炮而红。作为本书的一部分免费提供的大部分应用程序代码都是可重用的,许多开发人员很快开始在他们的项目中使用它。Wrox 有一个该书的网页,其中包含源代码和补丁。他们还为这本书提供了一个在线论坛。2003 年 2 月,开发人员 Jürgen Heller 和 Jann Karoff 说服 Rod Johnson 创建一个基于该框架代码的开源项目。从那一刻起,Rod、Jurgen 和 Yann 开始合作创造全新的东西。事实上,是 Yann Karoff 为新框架想出了“Spring”这个名字。这里的意思是Spring就像春天:传统J2EE的“冬天”之后的新开始。
  • 2003年6月,Spring 0.9在Apache 2.0许可下发布。
  • Spring 1.0 于 2004 年 3 月发布。有趣的是,即使在 Spring 1.0 发布之前,之前的 0.9 版本也很受欢迎并被广泛采用。
  • 2004 年 8 月,Rod Johnson、Jürgen Heller、Keith Donald 和 Colin Sampaleanu 共同创立了interface21,这是一家 Spring 咨询、培训和支持公司。
  • 2006年10月:Spring 2.0发布,简化了XML配置文件。
  • 2007年11月发布的Spring 2.5引入了注解配置。
  • 2012年12月发布的Spring 3.2引入了Java配置,支持Java 7、Hibernate 4、Servlet 3.0,同时也要求至少Java 1.5。
  • Yann Karoff 很早就离开了团队。罗德·约翰逊于 2012 年离开春季队。Jürgen Heller 仍然是 Spring 开发团队的活跃成员。
  • 2014 年发布的 Spring 4.0 添加了对 Java 8 的支持。
  • 同样是在 2014 年,Spring Boot 被引入世界。
  • Spring 5.0于2017年发布。像 Spring Boot 2.x 一样,它支持 Spring 5。
  • 事实上,这就是我们最喜欢的框架变成我们现在所知道的框架的原因。

2. Spring 与 Java EE

让我们对 Web 开发人员的两个关键Java堆栈进行一个小小的比较: SpringJava EE。 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 4
JavaEE
优点 缺陷
  • 用 Java EE 编写的应用程序被认为更可靠、安全和可扩展
  • Java EE 是业界认可的 API 标准
  • 主要基于注解和CDI(上下文和依赖注入),就像Spring
  • 基于EJB容器和POJO的实现
  • JEE 可以很好地处理具有大量事务的复杂应用程序
  • 成功用于可扩展的整体应用程序
  • Java EE 有自己的 OOP 语言,包含特定的风格和语法
  • 非常复杂的应用程序开发环境,对于初学者来说很难理解(有时对于老年人来说也是如此)
  • 项目的最终成本,包括设计、部署和应用程序开发,可能会令人望而却步
Java EE 由 Oracle 许可,专为需要广泛适应性、可分布式环境来构建大众市场应用程序的组织和公司而设计。与 Spring 一样,Java EE 包括用于数据库访问(JDBC、JPA)、远程工程调用(RMI)、信息(JMS)、Web 管理、XML 处理的附加库,并表征了企业 JavaBean、portlet、Servlet、Java Server Pages 的标准 API, Java EE 的基本目标 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 5是解决开发人员在使用各种 API 构建当前应用程序时面临的主要问题。与此同时,Java EE 中的开发具有很高的复杂性,这不仅对初学者来说也提高了门槛。对于经验丰富的专家来说,理解已经编写的功能可能很困难,因此 Java EE 中的开发需要更长的时间,因此成本也更高。简而言之,关于 Java EE,我们可以这样说: 复杂,但灵活。 好吧,现在让我们来谈谈Spring关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 6
春天
优点 缺陷
  • 允许您有效地组织对象交互
  • 比 Java EE 更简单
  • 基于IOCAOP实现,保证应用的松耦合
  • 基于 XML、Groovy 或注释配置工作
  • 允许您使用普通的旧 Java 对象 - POJO,开发人员不需要像应用程序服务器这样的企业容器
  • 为 Java 开发人员提供高水平的模块化
  • 提供 Java EE 库的实现,但以自己的方式,使它们的使用更加容易
  • 开源许可证
  • Spring Boot 极大地简化了初始应用程序设置
  • Spring应用程序代码通常很容易测试
  • Spring开发起来比较困难,因为它缺乏明确的重点
  • 对于新的 Java 开发人员来说,学习 Spring 框架可能具有挑战性(但仍然比 Java EE 更容易)
  • Spring 比 Java EE 慢
Spring 是一个面向大型企业的开源 Java 框架。Spring 框架旨在提供 J2EE 思想的最简单实现,并通过扩展基于 POJO 的编程模型的功能来利用优秀的编程实践。那些。Java EE更多的是一个官方标准,而Spring更多的是一个以自己的方式实现这个标准的框架。

比较结果

在我的理解中,Java EE 和 Spring 就像 JDBC 和 Hibernate,其中 JDBC 是一种更快的技术,但同时带有很多不必要的代码。Hibernate 已经使用了 JDBC,但同时显着简化和减少了开发(尽管施加了一些限制)。不可能肯定地说它们哪个更好。这也有点让人想起这个问题:ArrayList 或 LinkedList 哪个更好。毕竟,答案是一样的——视情况而定。他们每个人都有自己的优点和缺点,你需要仔细选择,权衡你的情况并了解他们中的哪一个现在会带来最大的好处。 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 7

3. 弹簧组件

好吧,现在让我们来谈谈组成 Spring 的框架。

Spring框架

它是为任何部署平台上基于 Java 的现代企业应用程序提供全面的编程和配置模型的核心模块。它包含了Spring的许多核心(core)技术:
  • core - 实现IoC(控制反转)和 DI(依赖注入)概念的基本功能;
  • AOP - Aspect-Oriented Planning——面向方面编程,旨在实现端到端逻辑;
  • MVCWebFlux - Web 交互框架;
  • JDBCORM——与数据库交互的技术;
  • 测试- 对 Spring 容器数据进行透明、简单测试的功能;
  • SpEL - Spring Expression Language - Spring 表达式语言;
  • ETC。

春季启动

通过最小化初始应用程序设置和自动配置 Spring 应用程序元素, 简化基于Spring的应用程序的创建。5分钟启动Spring boot示例

春季数据

显着简化数据访问技术、关系和非关系数据库的使用(删除重复代码并简化与数据的交互)。本文包含有关连接 Spring Data 的很好的教程。

春云

它用于微服务架构中,简化微服务之间的交互,并自动化在AWSAzure等云平台上部署应用程序。请参阅此处有关 Spring Cloud 的详细教程,但我要警告您,该主题并不容易,并且针对的是接近高级水平的专家。

春季安全

为应用程序提供功能强大且可定制的身份验证(authentication)和访问控制(authorization)工具。您可以在这篇文章中找到一个将Spring Security连接到您的应用程序的简单示例。 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 8

Spring GraphQL

该模块为基于 GraphQL Java 构建的 Spring 应用程序提供支持。 GraphQL是一种 API 查询语言,允许客户端查询他们需要的有限数据集,从而允许在有限数量的查询中收集数据。如果您已经熟悉 JPA,您可能已经接触过 EntityGraph,它具有类似(或相同)的概念。您可以在此处阅读有关 GraphQL 的更多信息。

春季会议

Spring框架的这一部分提供了用于管理用户会话信息的API和实现(用户会话数据存储在持久存储中,如RedisMongoDbHazelCast等)。可以在此处找到使用Spring Session的示例。

弹簧集成

该模块旨在简化基于 Spring 的应用程序中的消息传递,并支持通过声明性适配器与外部系统集成。这些适配器提供了比 Spring 对远程处理、消息传递和调度的支持更高级别的抽象。 详细文章

春季休息

提供了一组丰富的工具来简化 REST API 开发:用于路由请求的工具、用于将 JSON/XML 转换为所需类型的对象的工具等。可以在本材料中找到 Spring 中的 RESTful 服务的示例。

Spring Web 流程

Spring Web Flow 基于 Spring MVC,允许您实现 Web 应用程序的“流”。此类流程封装了指导用户完成某些业务任务的一系列步骤。它们跨越多个 HTTP 请求,是有状态的,可处理事务数据,可重用,并且本质上是动态且持久的。连接 Spring Web Flow 的示例可以在本英文指南中看到。

Spring网络服务

该模块旨在让您能够使用多种操作 XML 有效负载的方法之一创建灵活的 Web 服务,从而更轻松地开发基于契约的 SOAP 服务。SOAP - 简单对象访问协议 - 简单对象访问协议。

春天的仇恨

该模块提供了一些 API,以便在使用 Spring(尤其是 Spring MVC)时更轻松地创建遵循 HATEOAS 原则的 REST 控制器。 HATEOAS - 超媒体作为应用程序状态的引擎 - 超媒体作为应用程序状态的引擎。您可以在此处查看此Spring库的使用。

春季批次

该模块提供批量数据处理功能(当数据进行大块-批量处理时),这对于企业系统的日常运营至关重要。Spring Batch 提供了处理大量记录所需的可重用功能,包括日志记录/跟踪、事务管理、作业处理统计、作业重新启动、跳过和资源管理。您可以在此链接中找到有关 Spring Batch 的有趣评论。

春季 AMQP

该模块将核心 Spring 概念应用于基于 AMQP 的消息传递解决方案的开发。它提供了一个模板作为发送和接收消息的高级抽象。它还通过侦听器容器提供对消息驱动 POJO 的支持。 AMQP - Advanced Message Queuing Protocol - 高级消息队列协议。该项目包含两部分: spring-amqp 是基本抽象, spring-rabbit 是RabbitMQ的实现。 使用 Spring 的 RabbitMQ 连接示例 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 9

Apache Kafka 的 Spring

该项目将核心 Spring 概念应用于基于Kafka 的消息传递解决方案的开发。提供模板作为发送消息的高级抽象。它还通过必要的注释和侦听器容器为消息驱动的 POJO 提供支持。这里与 Spring AMQP 有明显的相似之处,但该模块是专门针对 Kafka 进行修改的。连接 Spring Kafka 的示例可以在这里查看。

春季信用中心

提供客户端支持,用于从Cloud Foundry平台上运行的 CredHub 服务器存储、检索和删除凭证。 CredHub - 提供用于安全存储、创建、检索和删除各种类型凭证的 API。Spring CredHub 为 CredHub API 提供了 Java 绑定,可以轻松地将 Spring 应用程序与 CredHub 集成。

春季弗洛

它是一个 JavaScript 库,为管道提供简单的 HTML5 嵌入式可视化设计器以及用于监控流和批处理数据的简单图形。该技术的演示位于链接的视频中

春季LDAP

该库简化了 LDAP 操作,并且基于 Spring JdbcTemplate。该框架允许搜索和关闭上下文、查看结果、编码/解码值、过滤器等等(基于与 Spring Jdbc 相同的原理构建)。可以在此处找到 Spring LDAP 的示例实现。

春罗

该模块提供了一个 RAD 工具,可以创建和管理基于 Spring 的应用程序。其目标是提高 Java 开发人员的生产力。它无法编写应用程序的业务逻辑,但可以处理配置和基础设施内容。

弹簧壳

通过依赖 Spring Shell jar 并添加您自己的命令(作为 Spring bean 中的方法),该库可以轻松创建功能齐全的 shell(也称为命令行)应用程序。创建命令行应用程序可能很有用,例如,可以与项目的 REST API 交互或使用本地文件内容。请阅读此处此处的更多内容。

Spring状态机

该模块允许应用程序开发人员在 Spring 应用程序中使用状态机概念。使用此功能的详细示例可以在此处此处找到。

弹簧穹顶

Spring Vault提供了熟悉的 Spring 抽象和客户端支持来访问、存储和撤销机密。它提供了与Vault交互的低级和高级抽象,使用户摆脱了基础设施的担忧。 Spring Vault 实施示例 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 10“我需要学习所有这些吗?” - 你惊讶地问道。 别害怕!这是错误的!更准确地说,不完全是这样。这是 Spring 中可用技术的完整列表。初学者需要了解的技术列表要简单得多:
  • 弹簧芯
  • 春季启动
  • Spring Web(MVC 和 REST)
  • Spring 数据(Spring ORM、Spring JDBC、Spring JPA)
  • 弹簧测试
还有其他技术经常出现在项目中,但由于它们的复杂性,它们通常由更有经验的开发人员而不是新手来处理。然而,对于初学者来说,至少对以下内容有一个大致的了解也很有用:
  • 春季安全
  • 春季AOP
  • 春云
其他技术的使用频率要低得多,因此您只需要认真研究它们即可从事特定项目。顺便说一句,您可以在我的另一篇文章中找到Java 开发人员应该了解的完整清单。今天我就讲到这里,大家很快再见! 关于 Spring 您需要了解的内容:历史、关键模块、与 Java EE 的比较 - 11
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION