Spring模块概览

对Spring的所有模块大概了解一下,建立一个整体的认知。

1. Spring Boot

帮助你快速的构建独立的、生产级别的基于Spring的应用。采用固定方式对待Spring平台和第三方库,以此来尽可能消除Spring应用的配置。

特性

  • 创建独立的Spring应用。
  • 直接内嵌Tomcat、Jetty或者Undertow,不需要部署war包。
  • 提供固定的"starter"依赖,减少你的构建配置。
  • 尽可能的自动配置Spring和第三方库。
  • 提供生产可使用的特性,例如metrics、健康检查、外部配置。
  • 绝对没有代码生成,也不需要XML配置。

官方资料

地址: https://spring.io/projects/spring-boot

2. Spring Framework

Spring 框架为现代Java企业应用提供了一个易于理解的编程和配置模型。Spring的一个关键元素是应用级别的基础设施支持,Spring关注企业的垂直领域,因此开发团队可以专注于应用层的业务逻辑,不需要被绑定到特定的部署环境。

特性

  • Core technologies: dependency injection, events, resources, i18n, validation, data binding, type conversion, SpEL, AOP
  • Testing: mock objects, TestContext framework, Spring MVC Test, WebTestClient
  • Data Access: transactions, DAO support, JDBC, ORM, Marshalling XML.
  • Spring MVC and Spring WebFlux web frameworks.
  • Integration: remoting, JMS, JCA, JMX, email, tasks, scheduling, cache.
  • Languages: Kotlin, Groovy, dynamic languages.

官方资料

地址:https://spring.io/projects/spring-framework

3. Spring Data

Spring Data的使命就是提供一个熟悉的、一直的、基于Spring的数据访问编程模型,并且仍然可以获得底层数据存储的特征。

它使得数据访问技术、关系型和非关系型数据库、map-reduce框架、基于云的数据服务更易于使用。这是一个伞形工程,其中包含了很多的针对特定数据库的子工程。

特性

  • 强大的repository 和定制化的对象映射抽象。
  • 从repositpry方法名称的动态查询推导。
  • 提供基础属性的领域基类实现。
  • 提供透明的审计(创建、最后改变)。
  • 整合定制化repository代码的可能性。
  • 通过JavaConfig和定制化的XML名称空间整合到Spring。
  • 与Spring MVC controllers高度整合。
  • 实验性的支持跨数据存储持久化。

官方资料

地址:https://spring.io/projects/spring-data

4. Spring Cloud

Spring Cloud提供快速构建一些分布式系统中公共模式的工具(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性token,全局锁,主节点选举,分布式sessions,集群状态)。协调的分布式系统会形成样板模式,开发者使用Spring Cloud可以快速的建立实现了那些模式的服务和应用。这些工具在任何分布式环境中都可以工作的很好,包括开发者自己的笔记本电脑,裸金属数据中心,和受管理的平台,例如Cloud Foundry。

特性

Spring Cloud专注于为典型用例提供好的开箱即用的经验,并且提供扩展性机制以覆盖其他用例。

  • 分布式的、版本控制的配置
  • 服务注册和发现
  • 路由
  • 服务间调用
  • 负载均衡
  • 断路器
  • 全局锁
  • 主节点选举(leadership election)和集群状态(cluster state)
  • 分布式消息

官方资料

地址: https://spring.io/projects/spring-cloud

5. Spring Cloud Data Flow

基于流和批处理的微服务,针对Cloud Foundry 和 Kubernetes.

Spring Cloud Data Flow 为流和批处理管道提供工具以创建复杂的拓扑。数据管道由Spring Boot应用组成,使用Spring Cloud Stream或者Spring Cloud Task微服务框架构建而成。

Spring Cloud Data Flow支持一定范围的数据处理用例,从ETL到导入导出、事件流和预测分析。

特性

Spring Cloud Data Flow服务器使用Spring Cloud Deployer 部署数据管道,这些数据管道由现代平台(例如Cloud Foundry和Kubernetes)上的Spring Cloud Stream或者Spring Cloud Task应用组成。

一系列为各种数据整合和处理场景预构建的流和批处理应用有助于学习和积累经验。

可以使用熟悉的Spring Boot编程模型构建针对不同中间件和数据服务的定制化流和任务应用。

一个简单的stream pipeline DSL使得部署应用和连接输出出入变得简单。当一系列任务应用需要作为有向图运行的时候,The composed task DSL特别有用。

dashboard为构建交互式数据管道提供了图形化编辑器,可以查看部署的应用并且监控他们的指标,这些是通过使用 Wavefront, Prometheus, Influx DB或者其他监控系统实现的。

Spring Cloud Data Flow 服务为组合和部署数据管道暴露REST API。一个独立的 shell 使得从命令行与这些API工作变得简单。

官方资料

地址: https://spring.io/projects/spring-cloud-dataflow

6. Spring Security

Spring Security 是一个可定制化的鉴权和访问控制框架。它是保护基于Spring的应用的事实标准。

Spring Security是一个专注于对于Java应用提供鉴权和授权的框架。就像所有的Spring项目一样,Spring Security真正的强大在于可以非常容易的扩展去满足定制化需求。

特性

  • 对于鉴权和授权的支持非常容易理解和扩展。
  • 可以抵御session fixation, clickjacking, cross site request forgery等攻击。
  • 整合Servlet API
  • 可以与Spring Web MVC整合。

官方资料

地址:https://spring.io/projects/spring-security

7. Spring GraphQL

Spring GraphQL提供在GraphQL上构建Spring 应用的支持。这个项目是和GraphQL团队合作的项目。

官方资料

地址:https://spring.io/projects/spring-graphql

8. Spring Session

Spring Session 为管理用户的session信息提供了API和实现。

特性

Spring Session使支持集群会话变得非常简单,而无需绑定到特定于应用程序容器的解决方案 。它也支持与下列组件透明的整合:

  • HttpSession:允许在应用容器中取代HttpSession,使用RESTful API时支持在headers中提供session ID.
  • WebSocket:接收WebSocket消息时,提供保持HttpSession存活的能力。
  • WebSession:允许在应用容器中替换Spring WebFlux的WebSession。

组成模块

Spring Session 由下面的模块组成:

  • Spring Session Core : 提供Spring Session的核心功能和APIs
  • Spring Session Data Redis:提供由Redis支撑的SessionRepository和ReactiveSessionRepository实现,并且提供配置支持。
  • Spring Session JDBC: 提供由关系型数据库支持的SessionRepository实现。
  • Spring Session Hazelcast:提供由Hazelcast支持的SessionRepository实现。

官方资料

地址:https://spring.io/projects/spring-session

9. Spring Integration

扩展Spring编程模型去支持众所周知的企业整合模式( Enterprise Integration Patterns)。Spring Integration 在基于Spring的应用里开启了轻量级消息,并且通过申明式适配器支持和外部系统整合。这些适配器对Spring 支持 remoting, messaging, and scheduling进行了高度抽象。Spring Integration的主要目标是提供一个构建企业整合方案的简单模型,并且维持关注点的分离,这对于产生可维护的、可测试的代码至关重要。

介绍

Spring Framework鼓励开发者使用接口和依赖注入(DI)来提供Plain Old Java Object(POJO)和它执行任务所需要的依赖。Spring Integration在这个概念上更进一步,使用消息范式将POJO组装到一起,并且独立的组件也许感知不到应用中其他组件。组装精细化可重用的组件去形成更高层级的功能,以此来构建应用。如果仔细设计,即使在更高层级这些流程也可以被模块化和重用。

除了把精细化的组件组装到一起,Spring Integration提供一系列的通道适配器和路由来于外部系统通信。通道适配器用于单路整合(发送或接收);路由用于请求、响应场景(进入边界或出边界)。

Spring Cloud Stream项目基于Spring Integration构建,其中Spring Integration 用作消息驱动微服务的引擎。

特性

  • 实现了大多数企业整合模式。
  • 端点(endpoint)
  • 通道(Point-to-point and Publish/Subscribe)
  • 聚合器(Aggregator)
  • Filter
  • Transformer
  • Control Bus
  • Integration with External Systems
  • ReST/HTTP
  • FTP/SFTP
  • Twitter
  • WebServices (SOAP and ReST)
  • TCP/UDP
  • JMS
  • RabbitMQ
  • Email
  • The framework has extensive JMX support
  • Exposing framework components as MBeans
  • Adapters to obtain attributes from MBeans, invoke operations, send/receive notifications

官方资料

地址:https://spring.io/projects/spring-integration

10. Spring HATEOAS

当使用Spring和Spring MVC时,Spring HATEOAS提供了一些轻松创建Rest表示模型 的API。它强调的核心问题是创建链接(link creation)和组装表示模型(representation assembly)。

了解HATEOAS:https://zhuanlan.zhihu.com/p/96027191

特性

  • 链接的模型类,资源表示模型
  • 创建指向Spring MVC控制器方法的Link builder API
  • 支持超媒体格式,例如HAL

Spring Boot Config

Spring Boot 将会做下面的事情:

官方资料

地址: https://spring.io/projects/spring-hateoas

11. Spring REST Docs

Spring REST Docs 帮助你文档化RESTful 服务。

它会组合手下的文档和Spring MVC Test自动生成的片段。这些方式可以将你从工具的文档限制中解放出来,例如 Swagger。

它帮助你生成准确、简介、组织良好的文档。这些文档可以让你的用户获得他们需要的信息,并且没有迷惑。

Spring Boot Config

Spring Boot提供了@AutoConfigureRestDocs注解来使用你的测试中的Spring REST Docs。

官方资料

地址:https://spring.io/projects/spring-restdocs

12. Spring Batch

一个轻量级、易于理解的批处理框架,设计目标是开启健壮批处理应用的开发,特别是对于企业系统的日常操作。

Spring Batch提供了对于处理大量记录非常关键的可重用功能。这些大量记录包括日志、跟踪、事务管理、任务处理统计、任务重启和资源管理。它也提供了更高级技术服务和特性,通过优化和分区技术这些服务和特性可以进行数据量特别大和性能要求特别高的批处理任务。简单的、复杂的、数据量大的批处理任务都可以利用这个框架以容易扩展的方式处理大量信息。

特性

  • 事务管理
  • 基于块的处理
  • 声明式I/O
  • 开始、停止和重启
  • 重试、跳过
  • 基于Web的管理接口(Spring Cloud Data Flow)

官方资料

地址:https://spring.io/projects/spring-batch

13. Spring AMQP

Spring AMQP工程将Spring 核心概念应用到基于AMQP消息解决方案的开发中。它为发送和接收消息提供了一个高度抽象的模板。它用"listener container"对消息驱动的POJOs提供支持。这些库促进了AMQP资源的管理,并且改善了依赖注入和声明式配置的使用。在这所有例子中,你会发现和Spring Framework支持JMS一样。

这个工程由两部分组成:spring-amqp是基础抽象,spring-rabbit是RabbitMQ的实现。

特性

  • 用来异步处理到来消息的Listener container
  • 用来发送和接收消息的RabbitTemplate
  • 用来自动声明队列、交换和绑定消息的RabbitAdmin

官方资料

地址:https://spring.io/projects/spring-amqp

14. Spring CredHub

Spring CredHub 在客户端侧提供了存储、检索和删除服务器上的证书,CredHub服务器运行在云服务平台上。

CredHub提供安全存储、生成、检索和删除各种类型证书的API。Spring CredHub对CredHub API提供了Java 绑定,使得Spring应用整合CredHub非常容易。

官方资料

地址:https://spring.io/projects/spring-credhub

15. Spring Flo

Spring Flo是一个JavaScript库,为管道和简单图提供了基础嵌入的HTML5可视化构建器。这个库用作Spring Cloud Data Flow中Stream构建器的基础。

Flo包含integration-flow designer 的所有基础元素,例如连接器、控制节点、面板、状态转换和图拓扑,有文本shell,支持SDL,设计用来创建和检视可理解性工作流的图形画布。

特性

  • 使用DSL创建、管理和监视流管道,图形化画布。
  • 通过DSL写管道的时候有内容辅助和自动补全。
  • 查看跨分布式部署的模型可视化表示。
  • 在GUI中使用自动适应和网格布局可以更简单、高效的组织管道。

官方资料

地址:https://spring.io/projects/spring-flo

16、Spring for Apache Kafka

The Spring for Apache Kafka (spring-kafka) 项目将Spring 核心概念应用到开发基于kafka的消息解决方案中。它提供发送消息的高度抽象模板。它也支持有@KafkaListener注解的消息驱动POJOs和监听者容器(listener container)。这些库促进了依赖注入和声明的使用。在所有的这些案例中,你会发现和Spring Framework中支持JMS、Spring AMQP支持RabbitMQ很相似。

特性

  • KafkaTemplate
  • KafkaMessageListenerContainer
  • @KafkaListener
  • KafkaTransactionManager
  • spring-kafka-test jar with embedded kafka server

官方资料

地址:https://spring.io/projects/spring-kafka#overview

17、Spring LDAP

Spring LDAP是一个简化Java中LDAP编程类库,它遵循的原则和Spring Jdbc一样。

LdapTemplate类封装了传统LDAP编程中所有的繁琐工作,例如创建、遍历

NamingEnumerations、处理异常和清理资源。这些繁琐的工作使得程序员要处理大量材料,数据在哪儿,要怎么处理数据等。就和JdbcTemplate一样,LdapTemplate为程序员消除了所有这些琐碎的工作,他们只需要处理实际的SQL和考虑怎么把数据映射到领域模型上。

除了这些,Spring LDAP支持将NamingExceptions 转化为未受检异常,并且提供了一些工具方法来处理filters、LDAP paths 和 attributes。

官方资料

地址: https://spring.io/projects/spring-ldap

18、Spring Roo

Java开发者的下一代应用快速开发工具。使用Roo,你可以在几分钟内构建一个完整的Java应用。

官方资料

地址:https://projects.spring.io/spring-roo/

19、Spring Shell

Spring Shell 工程的使用者可以快速构建一个全特性的shell应用,这依赖于Spring Shell 的jar包和添加用户自己的命令,这些命令都来源于Spring Beans的方法。创建命令行应用是非常有用的,例如和你项目的REST API进行交互,或者与本地文件内容进行工作。

特性

Spring Shell的特性包括如下:

  • 构建定制化命令的一个简单、注解驱动的编程模型。
  • 将Spring Boot的自动配置功能作为命令插件策略的基础。
  • tab键自动补全、配色、脚本执行。
  • 定制化的命令提示、shell历史文件名称、结果和错误的处理。
  • 基于领域特殊性动态开启命令。
  • 整合bean验证API。
  • 准备有内建命令,例如:clear screen、gorgeous help、exit。
  • ASCII art Tables, with formatting, alignment, fancy borders, etc.

官方资料

地址:https://spring.io/projects/spring-shell

20、Spring Statemachine

Spring Statemachine框架可以方便应用开发者在Spring 应用中使用状态机概念。

Spring Statemachibe旨在提供下面的特性:

特性

  • 针对简单的情况,有非常容易使用的扁平的一层状态机。
  • 分层状态机结构消除了复杂状态配置。
  • 状态机区域可以提供更复杂的状态配置。
  • 使用triggers, transitions, guards and actions.
  • 类型安全的配置适配器。
  • 在Spring Application Context外非常容易实例化的建造者模式。
  • 常见案例的解决方案。
  • 基于Zookeeper的分布式状态机。
  • 状态机事件监听器。
  • UML Eclipse Papyrus modeling.
  • 在持久化存储中保存状态机配置。
  • Spring IOC 集成将 bean 与状态机相关联。

状态机是强大的,因为它的行为总是被保证是一致的,相对来说这使得容易调试。这是因为当机器启动时操作规则就是一成不变的了。这个思想就是你的应用也许存在有限数量的状态,并且某些提前定义好的出发器可以将你的应用从一个状态带到下一个状态。这种触发器可以基于事件或者定时器。

在你应用之外非常容易定义高层逻辑,然后依赖于状态机去管理状态。你可以通过发送事件、监听改变或者简单请求当前状态去和状态机交互。

官方资料

地址:https://spring.io/projects/spring-statemachine

21、Spring Vault

Spring Vault提供熟悉的Spring抽象,并且支持访问、存储和回收隐私。它提供低层和高层两种Vault交互抽象层级。将用户从底层设施中解放出来。

使用 HashiCorp’s Vault 你可以拥有一个中心点去管理所有环境上的应用外部隐私数据。Vault可以管理静态和动态隐私数据,例如应用数据、远端应用或资源的用户名和密码,为外部服务提供证书,例如MySQL、PostgreSQL、 Apache Cassandra、Consul、AWS等其他服务。

特性

  • Spring 配置支持使用基于@Configuration的Java类。
  • VaultTemplate帮助类增加了执行通用Mongo操作的生产效率。包括documents和POJOs之间的整合对象映射。
  • 支持认证机制:Token、AppRole、AWS-EC2、AWS-IAM等。
  • 基于注解@VaultPropertySource的整合。
  • 支持可再生的、转动隐私。
  • 和Spring的转换服务整合的富特性对象映射。
  • 基于映射元数据的注解,但是可以扩展支持其他元数据格式。
  • 自动实现Repository接口,并且支持定制化查询方法。

官方资料

地址:https://spring.io/projects/spring-vault

22、Spring Web Flow

Spring Web Flow 构建在Spring MVC之上,允许实现流式Web应用(the “flows” of a web application)。一个流封装了一系列的步骤,这些步骤指导用户完成一些业务任务的执行。它会跨多个HTTP请求,有状态,处理事务数据,可重用,并且也许是动态的和长期运行的。

Spring Web Flow最佳应用场景是有控制导航的有状态web应用,例如,航班登记,申请贷款,购物车检验,甚至是向表单添加一个确认步骤。这些场景都有下面的特性:

特性

  • 存在清晰的开始和结束点。
  • 用户必须顺序的浏览一系列屏幕。
  • 直到最后一步,改变才会完成。
  • 一旦完成,它就不可能再偶发的重复事务。

Spring Web Flow 为了在高度抽象上编辑流提供了一个声明式流定义语言。它可以被整合进范围广泛的应用中,对于流编程模型来说,这些应用不会有任何的改变,包括Spring MVC、JSF和Portlet web 应用。需要导航的有状态web应用都有下面的通用问题:

  • 对流进行可视化是很困难的。
  • 应用中有许多访问HTTP Session的代码。
  • 强行控制导航是重要的,但是不可能实现。
  • 支持合适的浏览器返回按钮似乎是做不到的。
  • 浏览器和服务器在使用返回按钮上不能进行同步。
  • 多浏览器切换会导致HTTP session 数据的并发问题。
  • Spring Web Flow 对上述问题提供了解决方案。

官方资料

地址:https://spring.io/projects/spring-webflow

23、Spring Web Services

Spring Web Services (Spring-WS) 是Spring社区专注于创建文档驱动的Web服务的产物。Spring Web Services 旨在促进重视协议的SOAP服务开发,允许使用操作XML负载的多种方式中的一种创建灵活的Web服务。这个产品是基于Spring本身的,这意味着你可以使用Spring概念,例如把依赖注入作为你的Web服务的必要部分。

人们使用Spring-WS有很多原因,但是大多数人在发现缺少可供选择的SOAP栈之后被它吸引,Spring-WS伴随这Web服务最佳实践而来。Spring-WS使得最佳实践变得容易。这包括WS-I 基础轮廓, 协议优先开发, 并在协议和实现实践是松耦合的。Spring Web的其他关键特性如下:

特性

  • 使得最佳实践易于实现:Spring Web Services将生硬的最佳实践变得更加容易。这包括WS-I 基础轮廓, 协议优先开发, 并在协议和实现实践是松耦合的。
  • 强大的映射:到来的XML消息可以在标准的JAXP APIs中被处理,例如DOM, SAX, and StAX, but also JDOM, dom4j, XOM,或者其他编排技术。
  • 灵活的XML编排:在Spring Web Service发布中对象/XML映射模块支持JAXB 1 和2, Castor,XMLbeans,JiBX,和XStream。并且由于它是一个独立的模块,你也可以在非Web服务代码中使用。
  • 复用你的Spring经验:Spring-WS使用Spring 应用上下文处理所有的配置,这应该可以为Spring 开发者提升开发速度。并且,Spring-WS的架构和Spring-MVC是类似的。
  • 支持WS-Security:Spring Web Services的WS-Security实现提供了对Spring Security的整合。这意味着你也可以对SOAP服务使用已经存在的配置。
  • 由maven构建:这可以辅助你在基于Maven的项目中有效的重用Spring Web Service构件。

官方资料

地址:https://spring.io/projects/spring-ws