Spring 生态简介
目录
概述
项目说明主要项目社区项目保留项目
最后总结
概述
做 Java 开发的人一提起 Spring,首先在脑海中浮现出的就是“IoC”,“AOP”,“Spring MVC”,“Spring Security”等等这些名词,甚至大有“无 Spring 不 Java”的感慨。实际上,时至今日 Spring 已不再是一个简单的编程框架了,从最初的“SSH 框架”发展到今天,Struts 和 Hibernate 都几乎快要从程序员视野中消失了,而 Spring 却发展成了一个非常庞大且完整的生态。所以说,除非特别指明是 Spring 生态中的某个具体框架,否则提起“Spring”应该指的是整个 Spring 生态。说句不夸张的话,Java 程序员只要精通了 Spring,也就掌握了 Java 开发的精髓。
在整个 Spring 生态中包含了许多应用在特定场景的具体框架,如:“Spring Framework”,“Spring Security”,“Spring Boot”,“Spring Cloud”等等,其中“Spring Framework”框架是整个生态的核心基础,其他框架都需要依赖“Spring Framework”提供的基础功能,而且每个框架都有自己独立的代码仓库。
项目说明
Spring 生态下的项目分为 3 类:主要项目(Main Projects),社区项目(Community Projects),已经终止但是目前还保留的项目(Projects in the Attic)。最新的 Spring 生态项目列表详见:https://spring.io/projects 。
主要项目
目前,Spring 生态中包含 22 个主要活跃的项目。
1.Spring Framework
Spring Framework 项目是整个 Spring 生态的基础,包含了 Spring 最核心的功能,如:IoC,AOP,Spring MVC 等,其他项目都需要依赖 Spring Framework。另外,还需要注意的是 Spring Framework 项目又包含多个子模块,如:spring-core,spring-beans,spring-context,spring-aop,spring-web,spring-webmvc 等等。实际上,Spring Framework 项目是一个模块化的架构,各模块之间又存在依赖关系。我们在 Java Web 后台项目中使用得最多的 Spring MVC 实际上就是模块 spring-webmvc,它与其他模块的依赖关系如下所示:
显然,spring-webmvc 模块依赖 spring-context,spring-aop 和 spring-web。
2.Spring Boot
Spring Boot 是一个开发基于 Spring 的脚手架项目,它默认集成了嵌入式 Tomcat,配置注解化,支持快速集成第三方开发组件(如 MyBatis),大大降低了使用 Spring 的门槛,而且内置了许多可以直接用于生产环境的功能,是目前用于开发微服务架构项目的不二选择。值得注意的是: 许多人刚接触 Spring Boot 的人把它神话了,固然使用 Spring Boot 能快速开发一个健壮的、可直接运行的项目,但是它的核心和基础来源于 Spring Framework。对于重度依赖 Spring 的开发人员,应该先去吃透 Spring Framework,只要真正掌握了 Spring Framework 中各个模块的实现原理,对于在实际开发中使用 Spring Boot 遇到的问题也就迎刃而解了。
3.Spring Cloud
Spring Cloud 为开发基于微服务架构的软件系统提供了一整套工具集合,其中包含了开发各个微服务组件的具体项目,如:Spring Cloud Config(配置中心),Spring Cloud Netflix(服务注册中心),Spring Cloud Sleuth(服务调用监控),Spring Cloud Gateway(服务网关)等等。Spring Cloud 的基础是 Spring Boot,基于 Spring Boot 可以大大简化开发各微服务组件的流程。
4.Spring Cloud Data Flow
Spring Cloud Data Flow 用于构建在云环境或 K8S 中基于微服务的实时或批数据处理架构,具体来讲就是支持一系列需要进行数据处理的场景,如:ETL,数据导入/导出,事件流,预测分析等等。
5.Spring Data
Spring Data 旨在提供一套基于 Spring 编程模型的数据访问 API,是一个数据访问框架集合,其中包含了多个具体的支持不同方式访问特定数据库类型的子模块,如:Spring Data JDBC(使用 JDBC 方式访问关系型数据库),Spring Data MongoDB(访问 MongoDB 数据库)等。这个模块的功能类似于 MyBatis 这样的专门的 ORM 框架,在实际开发中可以根据需求进行灵活选择。
6.Spring Integration
Spring Integration 的目的是提供一个简单的模型,用于构建企业级应用集成解决方案。
7.Spring Batch
Spring Batch 是一个轻量级的批处理框架,旨在开发对企业系统日常运营至关重要的强大批处理应用程序。支持事务管理,提供了基于 Web 的管理接口。
8.Spring Security
Spring Security 是用于实现认证和授权,以及访问控制的安全框架,在 Java 生态与之提供类似的功能还有一个框架:Apache Shiro。Spring Security 依赖于 Spring Framework,也就是说如果要 Spring Security,那么应用架构也必须是基于 Spring Framework 的,这大大限制了 Spring Security 的使用场景;反之,Shiro 就没有这样限制,而且从项目架构上 Shiro 更加简洁。当然,Spring Security 提供了非常丰富的安全控制的功能,在某些方面甚至比 Shiro 更加完善,与之对应的是掌握的 Spring Security 的复杂度比较大。因此,对于在应用中是否选择 Spring Security 需要根据实际需求来决定。
9.Spring HATEOAS
如果 Web 应用基于 Spring 框架(即:使用了 Spring MVC)开发,那么可以直接使用 Spring HATEOAS 来开发满足 HATEOAS 约束的 RESTFul 服务。这里需要理解一个单词简写:“HATEOAS”。HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核心。它的重要性在于打破了客户端和服务器之间严格的契约,使得客户端可以更加智能和自适应,而 REST 服务本身的演化和更新也变得更加容易。
10.Spring REST Docs
Spring REST Docs 是一个文档工具,用于为 REST 架构风格的 Web 服务自动生成相应的文档,这样可以解放开发者专门撰写 API 文档的工作。
11.Spring AMQP
Spring AMQP 项目旨在将核心的 Spring 概念应用于基于 AMQP 的消息传递解决方案的开发中,它提供了一个“模板”的抽象用于发送和接收消息。
12.Spring Mobile
Spring Mobile 是对 Spring MVC 的扩展,旨在简化移动 Web 应用的开发。Spring Mobile 可以检测出当前请求使用的设备是 PC、还是手机或者是平板以及用户设备是安卓平台还是 iOS 平台,然后根据请求设备的不同,返回适合该设备的视图。
13.Spring For Android
虽然官方的说法是 Spring For Android 旨在简化原声 Android 应用的开发,但其实这个有点太过于牵强。Spring For Android 提供了 2 个对原生 Android 应用开发的支持:(1)提供了一个 REST 客户端(2)支持访问安全 API 时的认证
14.Spring Web Flow
Spring Web Flow 主要应用于需要在 Web 页面上创建引导用户执行类似“下一步”这样的基于流程的应用场景,该框架构建于 Spring MVC 之上。
15.Spring Web Services
Spring Web Services 用于开发 WebService 服务,类似的框架如:Apache CXF,Apache Axis2。
16.Spring LDAP
Spring LDAP 是一个工具,用于为基于 Spring 的应用程序使用 LDAP(Lightweight Directory Access Protocol)协议。
17.Spring Session
Spring Session 提供了管理用户 Session 信息的 API 和对应实现,Spring Session 使得支持集群会话变得简单,而不依赖于特定于应用程序容器的解决方案。简单来讲,传统的 Session 方案依赖于特定的容器(如:Tomcat),Spring Session 就是提供独立于特定容器的 Session 解决方案。其实,针对 Tomcat 容器,Session 集群化也有一个开源方案:tomcat-redis-session-manager。
18.Spring Shell
Spring Shell 用于开发基于命令行交互的应用。
19.Spring FLO
Spring FLO 是一个 JavaScript 类库,是 Spring Cloud Data Flow 中流构建器的基础。
20.Spring Kafka
Spring Kafka 用于在 Spring 项目中与 Kafka 交互。
21.Spring Statemachine
Spring Statemachine 是一个为开发人员在 Spring 项目中使用状态机的框架,帮助开发者简化状态机的开发过程,让状态机结构更加层次化。
22.Spring IO Platform
简单来说,Spring IO Platform 是一个对项目依赖进行统一版本管理的工具。本质就是一个 pom 文件,它记录了 Spring 项目和其它第三方库对应的版本信息。
社区项目
社区项目目前只有 2 个:Spring ROO,Spring Scala。
1.Spring ROO:这是一个开发工具包,旨在快速构建一个 Java 应用。2.Spring Scala:支持在 Scala 中使用 Spring 框架。
保留项目
某些项目已经终止了,但是仍然保留着,不必赘述。
最后总结
Spring 是一个生态系统,提供许多有用的编程框架或工具集。本文的目的不在于详细介绍 Spring 生态的每一个项目,而是通过一个全面的整理,对 Spring 生态有一个完整的认识,在实际中根据需要灵活选择对应的组件来使用即可。可以明确的是,当下最为流行的 Spring 项目是这 4 个:Spring Framework,Spring Security,Spring Boot,Spring Cloud。如下图所示,再次对 Spring 生态做一个概括性总结。
评论