前言
对于Java技术栈来说,特别是WEB开发,Spring的地位之高是毋庸置疑的。一直都有系统学习Spring的计划,但大多时候都停留在想法上,现在终于下定决心来系统的学习一下。曾几何时,Spring还只是IOC、依赖注入的“小”框架,发展到现在已经成为Spring“全家桶”了。得益于Spring的强大生态,Spring不再局限于WEB开发,其Slogan也随之演进为:
Spring makes Java simple. Spring makes Java modern. Spring makes Java productive. Spring makes Java reactive. Spring makes Java cloud-read.
Spring能做什么?

Microservices
当前,微服务的架构风格无疑已经成为一种“新常态”。微服务为应用的弹性扩展、职责隔离、独立开发、独立部署提供了更多的便利。 对于Java技术栈,Spring Boot几乎是构建微服务的首选,可以说是Java微服务框架的事实标准。虽然我从来不认可Spring Boot是微服务框架这种说法,因为它并不是限制仅能使用于微服务架构。

Reactive
响应式编程可用于构建异步、非阻塞的企业级应用,对于低延迟、高吞吐量的应用是一个理想的选择,因为响应式编程更能够充分利用现代处理器和多核处理器,特别是对于IO密集型的应用尤其适用。可用更少的微服务实例来支撑更多的并发用户。当然构建响应式企业应用还有其他技术栈可供选择,比如Nodejs,但对于Java技术栈,使用Spring是一种不错的选择。
Spring提供两套不同的技术栈来分别对应响应式和Servlet。

当然,使用响应式会带来一些编程思想和风格的转变,也会带来一些学习成本的增加。
Cloud
构建一个分布式系统并非易事,Spring Cloud提供了诸如配置管理、服务发现、API网关等分布式系统的必要组件。

Web Applications
毋庸置疑,Spring从一开始出现就在致力于WEB应用的开发,更快、更容易的构建WEB应用,减少样板代码,减少配置,Spring Boot更是为此而生。
Serverless
Serverless借助于云计算的东风,使得应用开发者不必再关心繁杂的服务器基础设施,而是关注于业务逻辑的开发。特别是对于事件驱动的架构更是Serverless的主战场,Spring Cloud Function提供了适配器,可以在主流云计算平台上支持Serverless功能,比如AWS Lambda, Azure等。
