Spring Projects

TIP

从配置到安全性,从 Web 应用程序到大数据——无论应用程序的基础结构需求是什么,都有一个 Spring Project 可以帮助您构建它。 从小开始并按需使用——Spring 是模块化设计的。

Spring 项目概览open in new window

Spring Framework

Web Servlet

5.3.4 版

文档的此部分涵盖对基于 Servlet API 构建并部署到 Servlet 容器的 Servlet 技术栈 Web 应用程序的支持。 各个章节包括 Spring MVC、View Technologies、CORS 支持与 WebSocket 支持。 对于反应式堆栈 Web 应用程序,请参阅“反应式堆栈上的 Web”。

  1. Spring Web MVC
  2. REST 客户端
  3. 测试
  4. WebSockets Spring MVC、WebSocket、SockJS、STOMP 消息传递
  5. 其他 Web 框架

Spring 框架

TIP

  • Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。
  • Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。
  • Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。
  • Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。

Spring 官网open in new window

Spring 项目

TIP

从配置到安全性,从 Web 应用程序到大数据——无论应用程序的基础结构需求是什么,都有一个 Spring 项目可以帮助构建。 从小开始并按需使用——Spring是模块化设计的。

Spring 项目概览open in new window

  • Spring Bootopen in new window 【启动】
    • Spring Boot 可以很容易地创建独立的、基于 Spring 的生产级应用程序,只需“启动(boot)”即可。
    • 对 Spring 平台与第三方库有自己的看法,所以可以毫不费力地开始。 大多数 Spring Boot 应用程序需要最少的 Spring 配置。
    • 特性:
      • 创建独立的 Spring 应用程序
      • 直接嵌入 Tomcat、Jetty 或 Undertow(无需部署 WAR 文件)
      • 提供有针对性的“起步”依赖项以简化构建配置
      • 尽可能自动配置 Spring 与第三方库
      • 提供可用于生产的功能,例如指标,运行状况检查和外部化配置
      • 完全没有代码生成,也不需要 XML 配置
  • Spring Frameworkopen in new window 【框架】
  • Spring Dataopen in new window 【数据】
  • Spring Cloudopen in new window 【云】
    • Spring Cloud 为开发人员提供了工具,以快速构建分布式系统中的某些常见模式 (例如:配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、群集状态)。 分布式系统的协调导致了样板代码,并且使用 Spring Cloud 开发人员可以快速建立实现这些模式的服务与应用程序。 Spring Cloud 可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑、裸机数据中心以及 Cloud Foundry 等托管平台。
    • 特性: Spring Cloud 着重于为典型用例提供良好的开箱即用体验,以及覆盖其他用例的扩展机制。
      • 分布式/版本化配置
      • 服务注册和发现
      • 路由
      • 服务到服务的呼叫
      • 负载均衡
      • 断路器
      • 全局锁
      • 领导选举和集群状态
      • 分布式消息传递
  • Spring Cloud Data Flowopen in new window 【云数据流】
    • 用于 Cloud Foundry 与 Kubernetes 的基于微服务的流式处理与批处理数据。
    • Spring Cloud Data Flow 提供了用于为流处理与批处理数据管道创建复杂拓扑的工具。 数据管道包含使用 Spring Cloud Streamopen in new windowSpring Cloud Taskopen in new window 微服务框架构建的 Spring Bootopen in new window 应用程序。
    • Spring Cloud Data Flow 支持一系列数据处理用例,从 ETL 到导入/导出、事件流与预测分析。
    • 特性:
      • Spring Cloud Data Flow 服务器使用 Spring Cloud Deployeropen in new window 将由Spring Cloud Stream 或 Spring Cloud Task 应用程序组成的数据管道部署到 Cloud Foundry 与 Kubernetes 等现代平台上。
  • Spring Securityopen in new window 【安全】
    • Spring Security 是一个功能强大且高度可定制的身份验证与访问控制框架。 是用于保护基于 Spring 的应用程序的实际标准。
    • 特性:
      • 全面且可扩展的身份验证与授权支持
      • 防御会话固定、点击劫持、跨站点请求伪造等攻击
      • Servlet API 集成
      • 与 Spring Web MVC 的可选集成
      • 以及更多……
  • Spring Sessionopen in new window 【会话】
    • Spring Session 提供了用于管理用户会话信息的 API 与实现。
    • 特性:
      • Spring Session 使支持集群会话变得很简单,而不必依赖于特定于应用程序容器的解决方案。
      • Spring Session 还提供了透明的集成:
        • HttpSession:允许以中性的方式替换应用程序容器(即 Tomcat)中的 HttpSession, 并支持在标头中提供会话 ID 以与 RESTful API 一起使用
        • WebSocket:提供了在接收WebSocket消息时保持HttpSession存活的功能
        • WebSession:允许以与应用程序容器无关的方式替换Spring WebFlux的WebSession
    • 模块: Spring Session 由以下模块组成:
      • Spring Session Core:提供核心的 Spring Session 功能与 API
      • Spring Session Data Redis:提供由 Redis 支持的 SessionRepository 与 ReactiveSessionRepository 实现以及配置支持
      • Spring Session JDBC:提供由关系数据库支持的 SessionRepository 实现与配置支持
      • Spring Session Hazelcast:提供由 Hazelcast 支持的 SessionRepository 实现与配置支持
  • Spring Integrationopen in new window 【集成】
    • 扩展 Spring 编程模型以支持著名的 企业集成模式(Enterprise Integration Patterns)open in new window。 Spring Integration 支持在基于 Spring 的应用程序中进行轻量级消息传递,并通过声明性适配器支持与外部系统的集成。 这些适配器提供了 Spring 对远程、消息传递与调度支持的更高级别的抽象。 Spring Integration 的主要目标是为构建企业集成解决方案提供一个简单的模型,同时保持关注点的分离,这对于生成可维护、可测试的代码至关重要。
    • 简介:
      • 使用 Spring 框架鼓励开发人员使用接口进行编码,并使用依赖注入(DI)为普通旧 Java 对象(POJO)提供执行任务所需的依赖项。 Spring Integration 使这一概念更进一步,其中 POJO 使用消息传递范例连接在一起,并且各个组件可能不知道应用程序中的其他组件。 通过组装细粒度的可重用组件以形成更高级别的功能来构建这样的应用程序。 通过精心设计,这些流程可以模块化,并且可以在更高的层次上重复使用。
      • 除了将细粒度的组件连接在一起之外,Spring Integration 还提供了多种通道适配器与网关来与外部系统进行通信。 通道适配器用于单向集成(发送或接收)。 网关用于请求/答复方案(入站或出站)。
      • Spring Cloud Stream 项目基于 Spring Integration,其中 Spring Integration 用作消息驱动的微服务的引擎。
        Spring Integration 特性
    • 特性:
      • 实现大多数企业集成模式
        • 端点
        • 渠道(点对点与发布/订阅)
        • 聚合器
        • 过滤器
        • 变压器
        • 控制总线
      • 与外部系统集成
        • ReST / HTTP
        • FTP / SFTP
        • 推特
        • WebServices (SOAP 与 ReST)
        • TCP / UDP
        • JMS
        • RabbitMQ
        • 电子邮件
      • 该框架具有广泛的 JMX 支持
      • 将框架组件公开为 MBean
      • 适配器从 MBean 获取属性、调用操作、发送/接收通知 :::
  • Spring HATEOASopen in new window超级赛亚人【超媒体作为应用程序状态的引擎】
    • 当使用 Spring 特别是 Spring MVC 时,Spring HATEOAS 提供了一些 API 来简化创建遵循 HATEOAS 原理的 REST 表示形式的 API。 试图解决的核心问题是链接创建与表示组装。
    • 特性:
      • 链接、资源表示模型的模型类
      • 链接构建器 API,用于创建指向 Spring MVC 控制器方法的链接
      • 支持 HAL 等超媒体格式
  • Spring REST Docsopen in new window REST 文档
  • Spring Batchopen in new window 【批处理】
    • 一个轻量级的,全面的批处理框架,旨在支持开发对企业系统的日常运行至关重要的强大的批处理应用程序。
    • Spring Batch 提供了可复用的功能,这些功能对于处理大量记录至关重要, 包括日志记录/跟踪、事务管理、作业处理统计信息、作业重启、跳过与资源管理。 还提供了更高级的技术服务和功能,这些功能和功能将通过优化和分区技术来实现极高容量和高性能的批处理作业。 简单以及复杂的大批量批处理作业都能以高度可扩展的方式利用框架来处理大量信息。
    • 特性:
  • Spring AMQPopen in new window【高级消息队列协议】
    • Spring AMQP 项目将 Spring 的核心概念应用于基于 AMQP 的消息传递解决方案的开发。 提供了一个“模板”作为用于发送和接收消息的高级抽象。 还通过“监听器容器”为消息驱动的 POJOopen in new window 提供支持。 这些库促进了 AMQP 资源的管理,同时促进了对依赖项注入和声明性配置的使用。 在所有这些情况下,将看到与 Spring Framework 中的 JMS 支持相似的地方。
    • 该项目包括两个部分;spring-amqp 是基础抽象、spring-rabbit 是 RabbitMQ 实现。
    • 特性:
      • 侦听器容器,用于异步处理入站消息
      • 用于发送和接收消息的 RabbitTemplate
      • RabbitAdmin 用于自动声明队列、交换与绑定
  • Spring for Androidopen in new window
    • Spring for Android 是一个框架,旨在提供用于 Android 应用程序的 Spring 项目系列的组件。 与所有 Spring 项目一样,Android 的真正强大之处在于它的扩展容易程度。
    • 特性:
      • 适用于 Android 的 REST 客户端
      • 身份验证支持访问安全 API
  • Spring CredHubopen in new window
  • Spring Floopen in new window
    • Spring Flo 是一个 JavaScript 库,为管道与简单图形提供了一个基本的可嵌入 HTML5 可视生成器。 该库用作 Spring Cloud Data Flowopen in new window 中流构建器的基础。
    • Flo 包含集成流设计器的所有基本元素,例如连接器、控制节点、调色板、状态转换与图形拓扑 ——重要的是,它具有命令行界面、DSL 支持与设计用于创建与查看全面工作流程的图形画布。
    • 特性:
      • 使用 DSL 或图形画布创建、管理与监视流管道,或者两者兼用
      • 通过具有代码提示与自动补全功能的 DSL 编写管道
      • 看到分布式部署中模块的直观表示
      • 使用 GUI 中的自动调整与网格布局功能可以更简单、更高效地组织管道
  • Spring for Apache Kafkaopen in new window
    • 用于 Apache Kafka 的 Spring(spring-kafka)项目将 Spring 的核心概念应用到基于 Kafka 的消息解决方案的开发中。 提供了一个“模板”作为发送消息的高级抽象。 还通过 @KafkaListener 批注与“监听器容器”为消息驱动的 POJOopen in new window 提供支持。 这些库促进了依赖注入和声明式的使用。 在所有这些情况下,将看到与 Spring 框架中的 JMS 支持以及 Spring AMQP 中的 RabbitMQ 支持相似。
    • 特性:
      • KafkaTemplate
      • KafkaMessageListenerContainer
      • @KafkaListener
      • KafkaTransactionManager
      • 带有嵌入式 kafka 服务器的 spring-kafka-test jar
  • Spring LDAPopen in new window【轻量级目录访问协议】open in new window
    • Spring LDAP 是一个用于简化 Java 中 LDAP 编程的库,其建立原理与 Spring Jdbc 相同。
    • LdapTemplate 类封装了传统 LDAP 编程中涉及的所有管道工作,例如创建、遍历命名枚举、处理异常与清理资源。 这使程序员可以处理重要的事情——在何处查找数据(DN 与过滤器)以及如何处理数据(与域对象进行映射、绑定、修改、取消绑定等), 正如 JdbcTemplate 将程序员从实际的 SQL 中解放出来一样,以及数据如何映射到域模型。
    • 除此之外,Spring LDAP 还提供了从命名异常到未检查的异常层次结构的异常转换,以及用于处理过滤器,LDAP 路径与属性的多个实用程序。
  • Spring Mobileopen in new window 【移动设备】
    • Spring Mobile 是一个框架,该框架提供的功能可以检测向 Spring 网站发出请求的设备的类型,并基于该设备提供其他视图。 像所有 Spring 项目一样,Spring Mobile 的真正强大之处在于它可以很容易地进行扩展。
    • 特性:
      • 设备解析器抽象,用于移动设备与平板设备的服务器端检测
      • 网站首选项管理,允许用户指示自己是否喜欢“正常”、“移动”或“平板电脑”体验
      • 站点切换器,能够根据用户的设备与可选的站点首选项,将用户切换到最适合的网站,无论是手机,平板电脑还是普通网站
      • 设备感知视图管理,用于组织与管理特定设备的不同视图
  • Spring Rooopen in new window
    • Spring Roo 是一个轻量级的开发人员工具,可快速轻松地交付即时结果。 最重要的是,可以 100% 用 Java 编写代码,并可以重用所有现有的 Java 知识、技能与经验。
  • Spring Shellopen in new window 【命令行】
    • Spring Shell 项目的用户可以通过依赖于 Spring Shell jar 并添加自己的命令(在 Spring 容器中作为方法来提供) 来轻松构建功能齐全的 shell(又名命令行)应用程序。 创建命令行应用程序可能非常有用,例如:与项目的 REST API 进行交互,或使用本地文件内容。
    • 特性:
      • 一个简单的注释驱动的编程模型,可以贡献自定义命令
      • 使用 Spring Boot 自动配置功能作为命令插件策略的基础
      • 制表符完备,着色与脚本执行
      • 自定义命令提示符,shell 历史记录文件名,结果和错误处理
      • 根据域特定条件动态启用命令
      • 与容器验证 API 集成
      • 已经内置的命令,例如清晰的屏幕、漂亮的帮助、退出
      • ASCII 艺术表、具有格式、对齐方式、花式边框等
  • Spring Statemachineopen in new window 【状态机】
    • Spring Statemachine 是一个框架,供应用程序开发人员在 Spring 应用程序中使用状态机概念。
    • 状态机之所以强大,是因为始终保证行为是一致的,因此调试起来相对容易。 这是因为在启动机器时,操作规则是一成不变的。 这个想法是,应用程序可能以有限数量的状态存在,并且某些预定义的触发器可以将应用程序从一种状态转移到另一种状态。 这样的触发器可以基于事件或计时器。
    • 在应用程序外部定义高级逻辑,然后依靠状态机来管理状态要容易得多。 可以通过发送事件,侦听更改或仅请求当前状态来与状态机进行交互。
    • 特性:
      • 易于使用的单层状态机,用于简单的用例。
      • 分层状态机结构可简化复杂的状态配置。
      • 状态机区域提供甚至更复杂的状态配置。
      • 触发器、过渡、防护与操作的使用。
      • 键入安全配置适配器。
      • 用于在 Spring 应用上下文之外使用的易于实例化的建造者模式
      • 常用案例食谱
      • 基于 Zookeeper 的分布式状态机
      • 状态机事件监听器。
      • UML Eclipse Papyrus 建模。
      • 将机器配置存储在持久性存储中。
      • Spring IOC 集成,将 Bean 与状态机关联。
  • Spring Vaultopen in new window 【保险库】
    • Spring Vault 为访问、存储与回收机密提供了熟悉的 Spring 抽象与客户端支持。 为与 Vault 交互提供了低层和高层的抽象,将用户从基础设施的关注点中解放出来。
    • 使用 HashiCorp 的保险柜,可以在中心位置管理所有环境中应用程序的外部秘密数据。 Vault 可以管理静态与动态机密,例如应用程序数据,远程应用程序/资源的用户名/密码,并为外部服务 (例如MySQL、PostgreSQL、Apache Cassandra、Consul、AWS等)提供凭据。
      Spring Vault 特性
    • 特性:
      • 使用基于 Java 的 @Configuration 类的 Spring 配置支持。
      • VaultTemplate 帮助程序类,可提高执行常见 Mongo 操作的效率。 包括文档与 POJOopen in new window 之间的集成对象映射。
      • 支持的身份验证机制:
        • Token
        • AppRole
        • AWS-EC2
        • AWS-IAM
        • Azure MSI
        • Certificates (PKI)
        • Cubbyhole
        • GCP-GCE
        • GCP-IAM
        • Kubernetes
        • Pivotal CloudFoundry
      • 基于注释的 @VaultPropertySource 集成
      • 支持可再生和循环的机密
      • 功能丰富的对象映射与 Spring 的转换服务集成
      • 与 Spring 转换服务集成的丰富对象映射特性
      • 存储库接口的自动实现,包括对自定义查询方法的支持。 :::
  • Spring Web Flowopen in new window 【Web 流】
    • Spring Web Flow 建立在 Spring MVC 之上,并允许实现 Web 应用程序的“流”。 流封装了指导用户完成某些业务任务的一系列步骤。 跨越多个 HTTP 请求、具有状态、处理事务数据、可重用、并且本质上可以是动态的并且可以长期运行。
    • Spring Web Flow 的最佳应用是具有受控导航的有状态 Web 应用程序,如办理航班登记、申请贷款、购物车结帐,甚至向表单添加确认步骤。 这些场景的共同之处在于以下一个或多个特征:
      • 有一个明确的起点和终点。
      • 用户必须按特定顺序浏览一组屏幕。
      • 直到最后一步,更改才能最终确定。
      • 完成后,就不能意外重复一个事务。
    • Spring Web Flow 提供了一种声明性的流程定义语言,用于在更高的抽象级别上创作流程。 允许将其集成到各种应用程序中,而无需进行任何更改(对流编程模型)(包括 Spring MVC、JSF 甚至 Portlet Web 应用程序)。 以下是在有导航要求的有状态 Web 应用程序中观察到的常见问题:
      • 可视化流程非常困难。
      • 该应用程序具有许多访问 HTTP 会话的代码。
      • 实施受控导航很重要,但不可能。
      • 适当的浏览器后退按钮支持似乎无法实现。
      • 浏览器和服务器与“返回”按钮的使用不同步。
      • 多个浏览器选项卡导致 HTTP 会话数据并发问题。
      • Spring Web Flow 提供了上述问题的解决方案。
  • Spring WebServicesopen in new window 【Web 服务】
    • Spring Web Services(Spring-WS)是 Spring 社区的产品,致力于创建文档驱动的 Web 服务。 Spring Web Services 旨在促进合同优先 SOAPopen in new window 服务的开发,从而允许使用多种处理 XML 有效负载的方式之一来创建灵活的 Web 服务。 该产品基于 Spring 本身,这意味着可以将诸如依赖项注入之类的 Spring 概念用作 Web 服务的组成部分。
    • 人们使用 Spring-WS 的原因有很多,但是大多数人在找到了遵循 Web 服务最佳实践所缺乏的替代 SOAPopen in new window 堆栈之后才开始使用它。
    • 特性:
      • 使最佳实践变得容易: Spring Web Services 使实施最佳实践更加容易。 这包括诸如 WS-I 基本概要文件,合同优先开发之类的实践,以及合同与实施之间的松散耦合。
      • 强大的映射:可以根据消息有效负载,SOAP Action 标头或 XPath 表达式,将传入的 XML 请求分发到任何对象。
      • XML API 支持: 可以使用标准的 JAXP API(例如 DOM、SAX 与 StAX)处理传入的 XML 消息,也可以使用 JDOM、dom4j、XOM 甚至是编组技术来处理。
      • 灵活的 XML 编组: Spring Web Services 发行版中的对象/XML 映射模块支持 JAXB 1和2、Castor、XMLBeans、JiBX 与 XStream。 并且由于它是一个单独的模块,因此也可以在非 Web 服务代码中使用它。
      • 重用 Spring 专业知识: Spring-WS 使用 Spring 应用程序上下文进行所有配置,这将有助于 Spring 开发人员快速,良好地掌握最新信息。 而且,Spring-WS 的体系结构类似于 Spring-MVC 的体系结构。
      • 支持 WS-Security: WS-Security 允​​许对 SOAP 消息进行签名、加密与解密,或针对它们进行身份验证。
      • 与 Acegi Security 集成: Spring Web Services 的 WS-Security 实现提供与 Spring Security 的集成。 这意味着也可以将现有配置用于 SOAP 服务。
      • 由Maven构建:可以帮助在自己的基于 Maven 的项目中有效地重用 Spring Web Services 构件。
      • Apache许可证:可以放心地在项目中使用 Spring-WS。