02 Spring概述
2.1 Spring 简介¶
![[02.01-1.webp]]
来自百度百科
Spring 是一个开源框架,它由 Rod Johnson 创建。它是为了解决企业应用开发的复杂性而创建的。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。
Spring 是一个轻量级的控制反转 (IoC) 和面向切面 (AOP) 的容器框架。
Spring 最初的出现是为了解决 EJB 臃肿的设计,以及难以测试等问题。
Spring 为简化开发而生,让程序员只需关注核心业务的实现,尽可能的不再关注非业务逻辑代码(事务控制,安全日志等)。
2.2 Spring 8 大模块¶
注意:Spring 5 版本之后是 8 个模块。在 Spring 5 中新增了 WebFlux 模块。 ![[02.01-2.webp]]
- Spring Core 模块
- 这是 Spring 框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对 Bean 的管理。
- 核心容器的主要组件是
BeanFactory,BeanFactory 是工厂模式的一个实现,是任何 Spring 应用的核心。 - 它使用 IoC 将应用配置和依赖从实际的应用代码中分离出来。
- Spring Context 模块
- 如果说核心模块中的
BeanFactory使 Spring 成为容器的话,那么上下文模块就是 Spring 成为框架的原因。 - 这个模块扩展了
BeanFactory,增加了对国际化(I18 N)消息、事件传播、验证的支持。 - 另外提供了许多企业服务,例如电子邮件、JNDI 访问、EJB 集成、远程以及时序调度(
scheduling)服务。 - 也包括了对模版框架例如 Velocity 和 FreeMarker 集成的支持
- 如果说核心模块中的
- Spring AOP 模块
- Spring 在它的 AOP 模块中提供了对面向切面编程的丰富支持,Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。
- 通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中,可以自定义拦截器、切点、日志等操作。
- Spring DAO 模块
- 提供了一个 JDBC 的抽象层和异常层次结构,消除了烦琐的 JDBC 编码和数据库厂商特有的错误代码解析,用于简化 JDBC。
- Spring ORM 模块
- Spring 提供了 ORM 模块。
- Spring 并不试图实现它自己的 ORM 解决方案,而是为几种流行的 ORM 框架提供了集成方案,包括 Hibernate、JDO 和 iBATIS SQL 映射,这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
- Spring Web MVC 模块
- Spring 为构建 Web 应用提供了一个功能全面的 MVC 框架。
- 虽然 Spring 可以很容易地与其它 MVC 框架集成,例如 Struts,但 Spring 的 MVC 框架使用 IoC 对控制逻辑和业务对象提供了完全的分离。
- Spring WebFlux 模块
- Spring Framework 中包含的原始 Web 框架 Spring Web MVC 是专门为 Servlet API 和 Servlet 容器构建的。
- 反应式堆栈 Web 框架 Spring WebFlux 是在 5.0 版的后期添加的。
- 它是完全非阻塞的,支持反应式流 (Reactive Stream) 背压,并在 Netty,Undertow 和 Servlet 3.1+容器等服务器上运行。
![[02.02-1.webp]]
8. Spring Web 模块
- Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文,提供了 Spring 和其它 Web 框架的集成,比如 Struts、WebWork。
- 还提供了一些面向服务支持,例如:实现文件上传的 multipart 请求。
2.3 Spring 特点¶
- 轻量
- 从大小与开销两方面而言 Spring 都是轻量的。
- 完整的 Spring 框架可以在一个大小只有 1 MB 多的 JAR 文件里发布。
- 并且 Spring 所需的处理开销也是微不足道的。
- Spring 是非侵入式的:Spring 应用中的对象不依赖于 Spring 的特定类。
- 控制反转
- Spring 通过一种称作控制反转(IoC)的技术促进了松耦合。
- 当应用了 IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
- 你可以认为 IoC 与 JNDI 相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
- 面向切面
- Spring 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。
- 应用对象只实现它们应该做的——完成业务逻辑——仅此而已。
- 它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
- 容器
- Spring 包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个 bean 如何被创建——基于一个可配置原型(prototype),你的 bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。
- 然而,Spring 不应该被混同于传统的重量级的 EJB 容器,它们经常是庞大与笨重的,难以使用。
- 框架
- Spring 可以将简单的组件配置、组合成为复杂的应用。
- 在 Spring 中,应用对象被声明式地组合,典型地是在一个 XML 文件里。
- Spring 也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
所有 Spring 的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为 Spring 中的各种模块提供了基础支持。
2.4 本教程软件版本¶
IDEA 工具:2022.1.4
- JDK:Java 17(Spring 6 要求 JDK 最低版本是 Java 17)
- Maven:3.8.6
- Spring:6.0.0-M 2
- JUnit:4.13.2