Skip to content

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]]

  1. Spring Core 模块
    • 这是 Spring 框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对 Bean 的管理。
    • 核心容器的主要组件是 BeanFactory,BeanFactory 是工厂模式的一个实现,是任何 Spring 应用的核心。
    • 它使用 IoC 将应用配置和依赖从实际的应用代码中分离出来。
  2. Spring Context 模块
    • 如果说核心模块中的 BeanFactory 使 Spring 成为容器的话,那么上下文模块就是 Spring 成为框架的原因。
    • 这个模块扩展了 BeanFactory,增加了对国际化(I18 N)消息、事件传播、验证的支持。
    • 另外提供了许多企业服务,例如电子邮件、JNDI 访问、EJB 集成、远程以及时序调度(scheduling)服务。
    • 也包括了对模版框架例如 Velocity 和 FreeMarker 集成的支持
  3. Spring AOP 模块
    • Spring 在它的 AOP 模块中提供了对面向切面编程的丰富支持,Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。
    • 通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中,可以自定义拦截器、切点、日志等操作。
  4. Spring DAO 模块
    • 提供了一个 JDBC 的抽象层和异常层次结构,消除了烦琐的 JDBC 编码和数据库厂商特有的错误代码解析,用于简化 JDBC。
  5. Spring ORM 模块
    • Spring 提供了 ORM 模块。
    • Spring 并不试图实现它自己的 ORM 解决方案,而是为几种流行的 ORM 框架提供了集成方案,包括 Hibernate、JDO 和 iBATIS SQL 映射,这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  6. Spring Web MVC 模块
    • Spring 为构建 Web 应用提供了一个功能全面的 MVC 框架。
    • 虽然 Spring 可以很容易地与其它 MVC 框架集成,例如 Struts,但 Spring 的 MVC 框架使用 IoC 对控制逻辑和业务对象提供了完全的分离。
  7. 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 特点

  1. 轻量
    • 从大小与开销两方面而言 Spring 都是轻量的。
    • 完整的 Spring 框架可以在一个大小只有 1 MB 多的 JAR 文件里发布。
    • 并且 Spring 所需的处理开销也是微不足道的。
    • Spring 是非侵入式的:Spring 应用中的对象不依赖于 Spring 的特定类。
  2. 控制反转
    • Spring 通过一种称作控制反转(IoC)的技术促进了松耦合。
    • 当应用了 IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
    • 你可以认为 IoC 与 JNDI 相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
  3. 面向切面
    • Spring 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。
    • 应用对象只实现它们应该做的——完成业务逻辑——仅此而已。
    • 它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
  4. 容器
    • Spring 包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个 bean 如何被创建——基于一个可配置原型(prototype),你的 bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。
    • 然而,Spring 不应该被混同于传统的重量级的 EJB 容器,它们经常是庞大与笨重的,难以使用。
  5. 框架
    • 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