【Java】Spring框架能干什么?Spring 八大模块分别是什么?如何理解 IoC 和 DI?

一、前言

本文将引入 Spring 框架,开始学习框架的应用。

Spring框架作为一个强大的Java应用程序框架,提供了广泛的功能和模块,旨在简化Java应用的开发过程。它的核心理念是控制反转(IoC)和依赖注入(DI),通过这两个概念,Spring能够实现松散耦合、可维护和可扩展的应用程序开发。

二、内容

2.1 简介

什么是 Spring 框架?它能干什么?

官网:Spring Framework

官网定义

Spring Framework 是一个功能强大的 Java 应用程序框架,旨在提供高效且可扩展的开发环境。它结合了轻量级的容器和依赖注入功能,提供了一种使用 POJO 进行容器配置和面向切面的编程的简单方法,以及一组用于AOP的模块。Spring 框架还支持各种移动应用开发技术,如 Android 和 iOS。此外,它还提供了对事务管理、对象/关系映射、JavaBeans、JDBC、JMS 和其他技术的支持,从而确保高效开发。

简单来说,Spring 是一个支持快速开发的Java EE应用程序的框架。它提供了一系列底层容器与基础设施,一个综合性的编程和配置模型,可以和大量常用的开源框架无缝集成,其主要目的是简化 Java 应用的开发,提高代码的可维护性,并促进松散耦合的设计。

Spring Framework 6.0 开始,Spring 需要 Java 17+

2.2 背景

术语 "Spring" 在不同的语境中有不同的含义,它可以指代整个Spring项目家族,也可以特指Spring框架本身。我们这里的 Spring 指的是 Spring Framework,这个核心框架。

Spring最早由Rod Johnson在他的《Expert One-on-One J2EE Development without EJB》一书中提出,旨在解决J2EE开发中的复杂性和笨重性问题。他提出了一种用轻量级框架替代EJB(Enterprise JavaBeans)的理念,以简化企业应用的开发,并提高可维护性和可测试性。后来,他着手开发了这个框架,并将其命名为Spring Framework。

随着Spring框架的发展和广泛的应用,Spring生态系统逐渐扩展,包括了一系列与Spring Framework紧密相关的项目和模块,其中一些重要的包括:Spring Boot、Spring Cloud、Spring Security等,共同构成了Spring生态系统。

2.3 Spring框架的模块化

Spring框架的强大之处在于其模块化的设计。我们可以根据自己的需要选择并使用不同的模块,更专注于业务需求的实现,而不必过多关心底层的细节。

以下是主要的 Spring 框架模块。

(1)Core

这是Spring框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对Bean的管理。

核心容器的主要组件是 BeanFactoryBeanFactory是工厂模式的一个实现,是任何Spring应用的核心。它使用IoC将应用配置和依赖从实际的应用代码中分离出来。

  1. 控制反转(IoC):IoC是Spring框架的核心理念,它允许开发者将组件的创建和依赖关系的管理交给Spring容器,从而实现了反转控制。
  2. 依赖注入(DI):DI是通过配置文件或注解的方式注入组件之间的依赖关系,使得组件更加灵活和可维护。

(2)Context

Spring Context模块是Spring框架的核心,它扩展了核心模块中的BeanFactory,提供了一种框架式的Bean访问方式,并引入了企业级功能。

它允许通过配置来定义和管理应用程序中的组件,包括Bean的创建和生命周期管理,并且支持国际化消息(I18N)、支持事件传播机制、提供验证支持等等。

(3)AOP

Spring AOP(面向切面编程)模块用于支持AOP编程。它允许开发者定义横切关注点(cross-cutting concerns)和通用行为,然后将它们应用到应用程序中的多个组件中。

通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中,可以自定义拦截器、切点、日志等操作。

(4)Web

Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文,提供了Spring和其它Web框架的集成,比如Struts、WebWork。还提供了一些面向服务支持,例如:实现文件上传的multipart请求。此外,Spring还支持在这些框架的前后插入拦截器,以实现更灵活的请求处理和处理程序管理。

(5)MVC

Spring MVC是Spring框架提供的面向Web应用的Model-View-Controller(MVC)实现。它允许开发者轻松构建Web应用程序,将应用程序的业务逻辑、用户界面和数据分离开来。Spring MVC提供了一个高度可定制的框架,以满足各种Web应用的需求。

(6)DAO

Spring DAO模块对JDBC(Java数据库连接)进行了抽象封装,提供了一个JDBC的抽象层和异常层次结构,简化了数据访问异常的处理,并能统一管理JDBC事务。这使得数据访问层的开发更加容易。

(7)ORM

Spring ORM模块提供了对现有的ORM(对象关系映射)框架的支持,包括Hibernate、JPA(Java持久化API)、JDO(Java数据对象)等,为这些流行的ORM框架提供了集成方案。它允许开发者在应用程序中使用ORM框架,以便更轻松地将Java对象映射到数据库表。这简化了数据持久性的管理,提高了应用程序的可维护性。

(8)WebFlux

Spring Framework 中包含的原始 Web 框架 Spring Web MVC 是专门为 Servlet API 和 Servlet 容器构建的。反应式堆栈 Web 框架 Spring WebFlux 是在 5.0 版的后期添加的。它是完全非阻塞的,支持反应式流(Reactive Stream)背压,并在Netty,Undertow和Servlet 3.1+容器等服务器上运行。

2.4 如何理解 Spring 的 IoC 和 DI

(1)什么是 IoC

控制反转(Inversion of Control,IoC)是一种面向对象编程的设计原则,我们可以看成是一种设计模型。

控制反转,反转的是什么?

简单来说,这里的反转指的是,不再采用硬编码的方式来 new 对象,将 new 对象的权利交出去,并且对象之间的关系我也不再维护了,都不管了。将控制权从程序的自定义部分反转(交出去)到通用框架中(或者说容器)。

也就是说,将对象的创建权交出去,将对象和对象之间关系的管理权交出去,由第三方容器来负责创建与维护

这里的好处很明显,可以用来减低代码之间的耦合度,提高代码的可维护性和可扩展性,符合依赖倒置原则和开闭原则

  • 依赖倒置原则(DIP)指的是面向接口编程,面向抽象编程,降低程序的耦合度,提高扩展力。
  • 开闭原则(OCP):对扩展开放,对修改关闭。也就是说,你在扩展系统功能的时候,没有修改以前写好的代码,就算符合 OCP 原则。

(2)什么是 DI

前面我们讲了,控制反转(IoC)是一种设计模式,一种编程思想。

那么控制反转常见的实现方式:依赖注入(Dependency Injection,简称DI)

在依赖注入中,对象的依赖关系由外部容器负责注入,而不是由对象自己创建或查找依赖对象。

Spring框架是一个经典的IoC容器,它实现了IoC思想,允许开发者通过依赖注入来管理和控制对象之间的依赖关系。Spring提供了多种方式来实现依赖注入,其中包括:

  1. 构造方法注入:通过构造方法,将依赖对象传递给目标对象。这是一种常见的依赖注入方式,它确保对象在创建时就具有必要的依赖关系。
  2. Setter方法注入:通过setter方法,将依赖对象注入到目标对象中。这种方式允许在对象创建后逐个设置依赖,更加灵活。

Spring框架的IoC容器负责管理对象的生命周期、依赖关系和配置信息,开发者只需要关注业务逻辑的实现,而不必担心对象的创建和依赖注入。

2.5 谈谈 Spring 的特点

  1. 轻量(Lightweight):
    • Spring框架在大小和开销方面都非常轻量。完整的Spring框架可以发布为一个小于1MB的JAR文件,且运行时开销微不足道。
    • Spring是非侵入式的,应用中的对象不依赖于Spring的特定类。
  2. 控制反转(Inversion of Control - IoC):
    • Spring采用控制反转技术,通过IoC促进松耦合。对象的依赖会通过被动的方式传递进来,而不是由对象自己创建或查找依赖。
    • IoC使容器主动将依赖传递给对象,而不是对象从容器中查找依赖。
  3. 面向切面编程(Aspect-Oriented Programming - AOP):
    • Spring提供丰富的面向切面编程支持,允许将应用的业务逻辑与系统级服务(如审计和事务管理)分离开发。
    • 应用对象只需关注业务逻辑,而不需要处理其他系统级关注点,如日志或事务管理。
  4. 容器(Container):
    • Spring充当容器的角色,包含并管理应用对象的配置和生命周期。
    • 你可以配置每个Bean的创建方式,包括单例或原型,以及它们如何相互关联。但与传统的重量级EJB容器不同,Spring更加轻便和易用。
  5. 框架(Framework):
    • Spring允许将简单组件配置和组合成复杂的应用,通常通过声明式配置,例如在XML文件中。
    • Spring提供了丰富的基础功能,如事务管理、持久化框架集成等,以帮助开发者专注于应用逻辑的开发。

三、总结

总的来说,Spring框架是一个轻量级的Java应用程序框架,它的核心目标是简化Java应用的开发过程,提高代码的可维护性和可扩展性。

相关推荐
paopaokaka_luck4 分钟前
基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
java·数据库·vue.js·spring boot·后端·算法
guoruijun_2012_411 分钟前
fastadmin多个表crud连表操作步骤
android·java·开发语言
Hello-Brand22 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码28 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.29 分钟前
Pod控制器
java·开发语言
2的n次方_32 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55132 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.33 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七37 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian15144 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全