概述
Spring让创建Java企业应用变得容易。它提供了企业环境中围绕Java语言所需要的一切。支持Groovy和Kotlin一样运行的在JVM上的可替代语言,并且可以根据应用程序的需求灵活的创建各种软件架构。从Spring Framework 5.1开始,Spring需要JDK8+(Java SE 8+)及提供对JDK11 LTS的开箱即用支持。Java SE 8 update 60是被支持的最低的Java8的补丁版本,但是通常推荐使用最新的补丁版本。
Spring支持很广泛的应用场景。在一个大的企业中,应用程序通常存在很长时间,且又不得不运行在JDK上,并且程序员无法控制升级周期。其他的可能作为一个服务器内嵌的独立jar包运行,可能运行在一个云环境下。还有其他的一些可能不需要服务器而作为独立运行的应用程序(如批处理或者集成的工作负载)。
Spring是什么意思
“Spring”这个词,放在不同的环境中有不同的理解。它可以引用Spring Framework项目本身,是一个万物开始的地方。随着时间的推移,其他的Spring项目已经构建在Spring Framework之上了。更多的时候,当人们说“Spring”,他们说的是整个的“Spring”项目家族。
Spring Framework是划分模块的。应用程序可以根据自己的需要进行选择。核心是Core容器,包含一个配置模块和依赖注入。除此之外,Srping Framework为不同的应用架构提供基础支持,包括消息、数据的事务和持久化以及web。它也支持基于Servlet的Spring MVC web框架,及并行的Spring WebFlux的响应式Web框架。
一个关于模块的说明:spring的框架jar包允许使用JDK9的模块路径(jigsaw)进行部署。为了在允许jigsaw的应用程序中使用它,spring framework 5 的jar包带有“Automatic-Module-Name”的清单,这些条目定义了独立于jar包的artifact名称的固定的模块名(这些jar包遵循相同的命名规划,使用“-”代替“.”,如spring-core和spring-context),当然,spring框架的jar可以同时在jdk8和jdk9及以上的classpath中工作得很好。
spring框架还支持依赖注入和通用注解,应用程序开发者通过可以选择这些规范来代替spring框架下spring所指定的机制。自从spring framework5.0开始,spring需要使用java EE7作为最低运行要求,与此同时,当运行时遇到java EE8及以上的最新的API的时候提供开箱即用交互。这会使得srping完美的兼容Tomcat8和9以及JBoss EAP7。
随着时间流逝,JavaEE在应用开发中的角色也得到了进化。早些时候的JavaEE和Spring,应用程序都是被创建和发布到一个应用服务器上的。今天,借助于SpringBoot、应用程序被创建为devops-对云计算友好的方式。使用嵌入式servlet容器和,并且更改起来更简单。自从spring framwork5开始,一个webflux应用程序甚至不再直接使用Servlet API,并且能够在服务器上运行(像Netty)而不是servlet容器。
Spring的设计理念
当我们学习一个框架的时候,不仅要知道它是做什么的,重要的是还要知道它遵循什么原则。下面列出spring框架的指导原则:
- 提供每一个层面的选择。spring让你尽可能晚的推迟设计决策。例如,你能通过配置而不用修改代码就可以切换持久化提供者。这同样适用于许多其他基础设施和第三方的api集成。
- 融合不同的观点,spring拥有灵活性,对于事情该如何做不固执已见。它对应用程序不同角度的需求的支持很宽泛。
- 保持强大的向后兼容性。spring在不同的版本间的小的突发变化的管理是很小心谨慎的。spring支持一系列的精心挑选的JDK的版本以及第三方库,以便容易维护依赖于spring的库和应用程序。
- 关注API的的设计。spring团队花费了大量的精力和时间去使API更直观,并且能够经得起多个版本和多年的考验。
- 对于代码的高标准要求。spring框架推出了一个浅显易懂、及时和精确的java文档。它是极少数代码结构整洁,包与包之间没有循环依赖的项目之一。