Spring使得建设企业应用变得简单了,Spring提供了Java领域的一切,包括对Groovy和Kotlin这两种可选语言的支持,能够根据应用需求构建多种架构。Spring Framework 5.1之后需要JDK8+,目前已经支持JDK11 LTS,Java SE 8 update 60是支持的最低版本。
Spring支持多种应用场景,比如运行在JDK和服务器上,也可以是一个内嵌的Jar文件,甚至是在云环境。
Spring是开源的并且其社区非常活跃,社区中能接收到行业各异的真是用户的反馈,这使得Spring不断自我完善。

Spring意味着什么

在不同的情境下Spring有着不同的含义,它可以是指Spring Framework项目本身,而基于Spring Framework的其他Spring项目也都被称为Spring,Spring会代指整个项目家族。这里会主要学习Spring Framework项目。

Spring Framework包含多个模块,用户可以根据需求选用。核心模块是容器模块,它包含了配置模型和依赖注入机制。此外,Spring Framework还提供不同架构的基础支持,例如消息、事务、持久化、web等,还有基于Servlet的web框架Spring MVC、响应式框架WebFlux。

注:Spring的模块支持JDK9的模块化Jigsaw

Spring和Spring Framework的历史

Spring诞生于2003年,最初是因J2EE规范的复杂难用而创造,一些人认为Spring与JavaEE是替代关系,实际上Spring是对JavaEE的补充。Spring没有全面遵循JavaEE平台的规范,而是从中挑选了一些:

  • Servlet API (JSR 340)
  • WebSocket API (JSR 356)
  • Concurrency Utilities (JSR 236)
  • JSON Binding API (JSR 367)
  • Bean Validation (JSR 303)
  • JPA (JSR 338)
  • JMS (JSR 914)
  • JTA/JCA

Spring支持依赖注入(JSR 330)和注解(JSR 250)规范。

Spring Framework 5.0需要JavaEE 7+(Servlet 3.1+,JPA2.1+),一些新的API需要JavaEE8(Servlet 4.0,JSON绑定API),Spring可全面兼容Tomcat8、9,WebSphere9,JBoss EAP 7。

JavaEE在应用开发中的角色发生了变化,早期应用都是单体架构并发布在单节点服务器上,如今使用Springboot,应用可以开发运维一体化以及适合上云,Servlet容器也在变化,Spring Framework 5开始支持WebFlux应用,不在遵循Servlet API,可以运行在非Servlet容器智商,例如netty。

Spring在持续的发展,除了Spring Framework还有很多其他项目,例如Spring Boot、Spring Security、Spring Data,Spring Cloud,Spring Batch。

设计的哲学

当学习框架时,明白它的设计原则是很重要的,以下是Spring的设计原则:

  • 提供更多更方便的选择:Spring能够让具体选型时间延后,例如,可以使用简单配置就切换不同类型数据库,还包括其他的架构设计点以及第三方API的集成。
  • 接纳不同的观点:Spring拥抱灵活性,会接纳并支持各种需求
  • 向后兼容:在版本升级时Spring会仔细选择JDK版本、第三方库,以保证最大限度的向后兼容
  • 关注API设计:Spring团队始终如一的仔细考量API设计
  • 高质量代码:Spring框架非常强调有意义的、最新的和准确的javadoc。它是极少数能够声明干净的代码结构,并且包之间没有循环依赖关系的项目之一