1. 概述
Spring 让开发 Java 企业应用程序变得容易。提供了在企业环境中使用 Java 语言所需的一切,并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需要灵活的创建多种架构。从 Spring Framework 5.1 开始,Spring 需要 JDK 8+(Java SE 8+)并为 JDK 11 LTS 提供开箱即用的支持。JDK建议使用最新的1.8补丁版本。
Spring 支持广泛的应用场景。在大型企业中,应用程序往往运行很长时间,并且必须运行在升级周期不受开发人员控制的JDK应用程序服务器上。其他可能作为嵌入服务器的单个 jar 运行。也可能在云环境中,还有一些可能是不需要服务器的独立应用程序(例如批处理或集成工作负载)。
Spring 是开源的。它拥有一个庞大而活跃的社区,可根据各种实际用例提供持续的反馈。这帮助 Spring 在很长一段时间内成功发展。
2. Spring的含义
术语“Spring”在不同的上下文中意味着不同的东西。它可以用来指 Spring Framework 项目本身,这就是一切的开始。随着时间的推移,其他 Spring 项目已经构建在 Spring Framework 之上。大多数情况下,当人们说“Spring”时,他们指的是整个项目系列(也就是Spring 全家桶)。
Spring 框架分为多个模块。应用程序可以选择他们需要的模块。core是核心容器的模块,包括配置模型和依赖注入机制。除此之外,Spring Framework 为不同的应用程序架构提供基础支持,包括消息传递、事务、数据持久性以及 Web框架。 Web框架包括基于 Servlet 的 Spring MVC Web 框架,以及并行的 Spring WebFlux 响应式 Web 框架。
3. Spring 的历史和 Spring 框架
Spring 于 2003 年应运而生,以应对早期J2EE规范的复杂性 。虽然有些人认为 Java EE 和 Spring 是在竞争,但实际上 Spring 是对 Java EE 的补充。Spring 编程模型不包含 Java EE 平台规范;相反,它集成了 J2EE中精心挑选的单个功能:
- Servlet API ( JSR 340 )
- WebSocket API ( JSR 356 )
- 并发实用程序 ( JSR 236 )
- JSON 绑定 API ( JSR 367 )
- Bean 验证 ( JSR 303 )
- JPA ( JSR 338 )
- JMS ( JSR 914 )
- 以及用于事务协调的 JTA/JCA 设置(如有必要)。
Spring Framework 还支持 Dependency Injection ( JSR 330 ) 和 Common Annotations ( JSR 250 ) 规范,应用程序开发人员可以选择使用它们来代替 Spring Framework 提供的特定于 Spring 的机制。
从Spring Framework 5.0 开始,Spring 至少需要 Java EE 7 级别(例如 Servlet 3.1+、JPA 2.1+) ,同时在 Java EE 8 级别提供与较新 API 的开箱即用集成(例如 Servlet 4.0、JSON Binding API)。这使 Spring 与 Tomcat 8 和 9、WebSphere 9 和 JBoss EAP 7 等Web容器完全兼容。
随着时间的推移,Java EE 在应用程序开发中的作用不断发展。在 Java EE 和 Spring 的早期,创建应用程序是为了部署到应用程序服务器。今天,在 Spring Boot 的帮助下,应用程序以一种 DevOps 和云友好的方式创建,嵌入了 Servlet 容器,更改起来很简单。从 Spring Framework 5 开始,WebFlux 应用程序甚至不直接使用 Servlet API,并且可以在不是 Servlet 容器的服务器(例如 Netty)上运行。
Spring 不断创新和发展。除了 Spring 框架之外,还有其他项目,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。重要的是要记住,每个项目都有自己的源代码存储库、问题跟踪器和发布节奏。
4. 设计理念
当您了解一个框架时,重要的是不仅要了解它的作用,还要了解它遵循的原则。以下是 Spring Framework 的指导原则:
- 提供各个级别的选择。Spring 允许您尽可能晚地推迟设计决策。例如,您可以在不更改代码的情况下通过配置切换持久性提供程序。许多其他基础设施问题和与第三方 API 的集成也是如此。
- 包容不同的观点。Spring 拥抱灵活性,并且对事情应该如何做没有固执己见。它以不同的视角支持广泛的应用需求。
- 保持强大的向后兼容性。Spring 的演变经过精心管理,以强制在版本之间进行很少的重大更改。Spring 支持精心挑选的一系列 JDK 版本和第三方库,以方便维护依赖 Spring 的应用程序和库。
- 关心 API 设计。Spring 团队投入了大量的思想和时间来制作直观的 API,并在许多版本和多年中保持不变。
- 为代码质量设定高标准。Spring Framework 非常强调有意义、最新和准确的 java doc。它是极少数可以声称代码结构清晰且包之间没有循环依赖关系的项目之一。
5. 特性(功能)
- 核心模块:依赖项注入,事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP。
- 测试模块:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。
- 数据访问模块:事务,DAO支持,JDBC,ORM,XML。
- Web框架:Spring MVC和 Spring WebFlux 。
- 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。
- 语言支持:Kotlin,Groovy,动态语言。
6. 体系结构
Spring 框架采用分层架构,根据不同的功能被划分成了多个模块,这些模块大体可分为 Data Access/Integration、Web、AOP、Aspects、Messaging、Instrumentation、Core Container 和 Test。
7. 源码结构
模块名 | 说明 |
---|---|
spring-aop | 提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。 |
spring-aspects | 提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。 |
spring-beans | 提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。 |
spring-context | 建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。 |
spring-context-indexer | Spring 的类管理组件和 Classpath 扫描 |
spring-context-support | 将第三方库整合进 Spring 应用上下文 提供支持 |
spring-core | 提供了 Spring 框架的基本组成部分,包括 IoC 和 DI 功能。 |
spring-expression | 是运行时查询和操作对象图的强大的表达式语言 |
spring-instrument | 提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。 |
spring-jcl | Commons Logging 桥接模块的封装 |
spring-jdbc | 提供了一个 JDBC 的抽象层,大幅度减少了在开发过程中对数据库操作的编码。 |
spring-jms | 指 Java 消息服务,包含的功能为生产和消费的信息。 |
spring-messaging | 是运行时查询和操作对象图的强大的表达式语言。 |
spring-orm | 对流行的对象关系映射 API,包括 JPA、JDO、Hibernate 和 iBatis 提供了的集成层 |
spring-oxm | 提供了一个支持对象/XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。 |
spring-r2dbc | 基于R2DBC的存储库集成 |
spring-test | 支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。 |
spring-tx | 支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO |
spring-web | 提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。 |
spring-webflux | 完全的reactive并且非阻塞的web框架 |
spring-webmvc | 模型-视图-控制的体系结构和可以用来开发灵活、松散耦合的 web 应用程序的组件 |
spring-websocket | 全新的WebSocket支持 |
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: