当前位置: 首页 > news >正文

Spring框架:介绍和快速入门

什么是框架

框架就好比房子的框架,它提供了建造房屋所需的基本结构和规范。开发者可以在这个框架上搭建自己的应用,就像在一座已经搭好基础的房子里进行装修,省去了从零开始建房的繁琐工作,这样你能更快地完成项目,因为很多基础工作已经被框架搞定了。

  • 框架 = 毛坯房
  • 不用框架 = 一砖一瓦去盖房子
  • 几个框架一起用 = 架构(SSM)

为什么要学 Spring 框架

Spring 使每个人都可以更快、更轻松、更安全地进行 Java 编程。Spring 对速度、简单性和生产力的关注使其成为世界上最受欢迎的 Java 框架。

1. 为什么要学习 Spring 6

Spring 作为 Java 程序员必会武功,无论是 Spring 的哪个版本,至少需要会一个版本。既然我们怎么都要学习 Spring,为什么不学习最新版的 Spring 6 呢?

Spring 6 最低支持 JDK 17,Spring 6 会把 JDK 17 的特性体现得淋漓尽致。Spring 5 最低支持 JDK 8,而 Spring 6 最低支持 JDK 17,直接把 JDK 9~16 全跳过去了(Spring 5 支持 JDK 8、9)。JDK 17 也是 Java 目前最新的一个长期支持版。可想而知在 Spring 6 会把 JDK 17 的特性体现得淋漓尽致。

还有一个原因:Spring 产品一直紧跟,甚至引领 Java 行业潮流发展方向。通过学习最新的 Spring 6,可以洞悉出 Java 未来的趋势,这点还是非常重要的。


什么是 Spring

Spring 有很多含义,Spring 本身是一个生态体系(全家桶),它们都建立在 Spring 框架之上。大多数情况下,通常我们说Spring = Spring 框架


Java Web 架构演变过程

  1. Servlet + JSP + JavaBean(跳转页面、业务逻辑判断、数据库查询)
  2. MVC 三层架构
    • Web:跳转页面(M Model = POJO(User)、V View = JSP、C Controller = Servlet、new UserService())
    • Service:业务逻辑判断(new UserDao())
    • DAO:数据库查询
  3. 使用 EJB 进行应用的开发,但是 EJB 是重量级框架(在使用的时候,过多的接口和依赖,侵入性强),在使用上比较麻烦(UserService imp extends)
  4. Struts1/Struts2 + Hibernate + Spring(SSH)
    • Web:跳转页面(Struts)
    • Service:业务逻辑判断
    • DAO:数据库查询(Hibernate)
  5. SpringMVC + MyBatis + Spring(SSM)
    • Web:跳转页面(SpringMVC,出现 BUG 使用比较麻烦)
    • Service:业务逻辑判断
    • DAO:数据库查询(MyBatis)
  6. SpringBoot 开发,约定大于配置(SSM 搭建架构需要大量 XML 配置文件)

Spring 发展历程

Spring Framework 前身是 interface21,由 Rod Johnson 于 2002 年研发,2003 年上线第一个版本。Spring 框架之父 Rod Johnson(罗宾·约翰逊,悉尼大学计算机硕士,音乐博士),他的《轮子理论》是 Spring 框架的宗旨,也是 Spring 框架能够被其他人接受的原因。

轮子理论:不要重复地创造轮子。这里面的轮子就是汽车的轮子,告诉我们已经生产过的轮子就拿过来用,没必要重复生产多余的轮子。

轮子理论放在 Spring 框架上:我们 Spring 框架不发明新的技术,我们只是让已经有的技术使用起来更加简单(整个 Spring 框架最重要的一句话,Spring 框架的作用到底是干什么的)。乍一看这句话没问题,但细品能发现 Rod Johnson 是个纯老六。说 Spring 框架不发明新的技术,是告诉别的公司,我们不抢你们的生意,来用我,我还能让你们的技术用起来更加方便。但实际上:

  • MVC 框架:曾经 Apache 爆火的 Struts1 和 Struts2 都被 Spring MVC 给干掉了,近几年 Spring 自己又出了 WebFlux 自己要干自己。
  • 数据访问层框架:曾经的 Hibernate 目前被 MyBatis 干掉了。Spring 团队出了 Spring Data 一直在和 MyBatis 竞争。

虽然现在可以直接通过 SpringBoot 来开发,但是 SpringBoot 也是基于 Spring 的,所以学 SpringBoot 也要从 Spring 开始。

重要时间线

  • 2009 年:VMware 收购了 Spring
  • 2013 年 4 月:由 EMC(美国信息存储资讯科技公司)、VMware(虚拟化的鼻祖)和 GE(美国通用电气公司)合资成立了 Pivotal 公司(美国毕威拓),主做云原生平台。VMware 将 Spring 拆分给了 Pivotal 公司。

EMC、VMWare、Spring 之间有着一大段相爱相杀的故事,中间还有第三者戴尔公司插足的情况,如果细说起来可以拍一部商业大片了。比较重要的时间线如下:

  • 2020 年 1 月 3 日:VMware 宣布完成对 Pivotal 的收购,至此 Pivotal 成为 VMWare 的全资子公司。交易价格约 27 亿美元。按照现在的汇率计算,大约 188 个小目标。收购完成后 Spring 框架的 Logo 也进行了改变。从图片可以看到 Spring By Pivotal 变成了 Spring by VMware Tanzu。其中 VMWare Tanzu 是戴尔科技旗下 VMware 最新推出的云原生系列产品家族名称。

Spring Framework 主版本发布时间

到文档制作时,Spring 框架最新版为 6.0.6,所以本套课程就以 Spring Framework 6.0.6 版本进行讲解。


Spring Framework 各个版本重大变化

那就不能只说 Spring Framework 5 和 Spring Framework 6 的区别,这样弄的好像同学们之前学习过 Spring Framework 5 一样。所以有必要来说一说 Spring 从 1.X 版本到 6.X 版本的重大变化,这样才能深刻地感受到 Spring Framework 的发展变化。

版本版本特性
Spring Framework 1.01、所有代码都在一个项目中
2、支持核心功能 IOC、AOP
3、内置支持 Hibernate、iBatic 等第三方框架
4、对第三方技术简单封装,如:JDBC、Mail、事务等
5、只支持 XML 配置方式
Spring Framework 2.01、最重要的变化:支持注解配置
2、增加对 ehcache 支持
3、对 JMS(Java 消息服务)、JMX(Java 管理扩展)等支持
Spring Framework 3.01、支持 Java 类的配置
2、由原来的一个项目拆分成多个子模块
3、添加单元测试子模块
Spring Framework 4.01、全面支持 Java 8
2、添加二级子项目 Spring MVC,基于 Servlet 3.0 开发
3、提供 WebSocket 支持
4、引入 @RestController 等注解,增强对 Restful 的支持
Spring Framework 5.01、最低环境要求 Java 8
2、日志整合。把原来 commons-logging 封装后变为 spring-jcl 模块
3、跨域更改。原来的 JSONP 支持变更为修改响应头的 @CrossOrigin 注解
4、响应式编程。添加二级子项目 WebFlux
5、使用 Kotlin(科特林)进行函数式编程
Spring Framework 6.01、最低环境要求 Java 17
2、加强对响应式编程支持。添加子模块 spring-r2dbc
3、取消子模块 spring-orm-hibernate4,只保留 spring-orm,只支持 Hibernate5

Spring Framework 5 和 6 次版本支持时间


Spring 框架介绍

Spring 框架英文全称 Spring Framework,是由 Spring 团队研发的模块化、轻量级开源框架。其主要目的是为了简化项目开发。在项目开发中,可以说没有刻意使用 Spring,却处处有着 Spring 存在。用官网对 Spring 框架的介绍:Spring 框架核心功能包含依赖注入、事务管理、Web 应用、数据访问、消息发送等等。

Spring Framework 6 包含的模块

Spring 从 6.0 版本开始把一个项目拆分成多个项目。到目前的 Spring Framework 6 版本,共计分为 20 个子模块。

Test

对应spring-test.jar。Spring 提供的测试工具,可以整合 JUnit 测试或 TestNG,简化测试环节。

Core Container

Spring 的核心组件,包含了 Spring 框架最基本的支撑。

  • Beans:对应spring-beans.jar,Spring 进行对象管理时依赖的 jar 包。
  • Core:对应spring-core.jar,Spring 核心 jar 包,很多基础核心类都在这个包中。
  • Context:对应spring-context.jar,Spring 容器上下文对象。除了包含容器类型,很多第三方支持的内容都在这个模块中。
  • Expression:对应spring-expression.jar,Spring 表达式语言。可以通过表达式快速获取容器内容。
  • JCL:对应spring-jcl.jar,Spring 日志。从 Spring 老版本要求使用commons-logging.jar,从 Spring 5.x 开始,自己对 commons-logging 做了封装。
AOP

面向切面编程,对应spring-aop.jar

Aspects

AspectJ 的具体实现,面向切面编程的另一种实现。对应spring-aspects.jar

Instrumentation

服务器代理接口的具体实现。对应spring-instrument.jar

Messaging

集成 messaging api 和消息协议提供支持。对应spring-messaging.jar

Data Access / Integration

Spring 对数据访问层的封装。

  • JDBC:对应spring-jdbc.jar,Spring 对 JDBC 的封装,当需要使用 Spring 连接数据库时使用。spring-jdbc.jar需要依赖spring-tx.jar
  • Transactions:对应spring-tx.jar,事务管理。
  • ORM:对应spring-orm.jar,Spring 整合第三方 ORM 框架需要使用的 jar 包,例如 Hibernate 框架。
  • OXM:对应spring-oxm.jar,Spring 对 XML 序列化实现,本质是对 Marshalling XML 的支持。
  • R2DBC:对应spring-r2dbc.jar,对数据库响应式编程的支持。
  • JMS:对应spring-jms.jar,Spring 提供对 JMS 的框架。
Web

Spring 对 javax 下的接口或类做的扩展功能。

  • web:对应spring-web.jar,Spring 框架在 Java Web 项目使用时必须的包。
  • webmvc:对应spring-webmvc.jar,实际上就是 SpringMVC 框架。
  • webflux:对应spring-webflux.jar,和 Spring MVC 类似,但是是目前比较流行的响应式编程。
  • websocket:对应spring-websocket.jar,Spring 对 WebSocket 的支持。

学习 Spring 其实就是在分别学习 Spring 所有模块的功能。随着 Spring 框架的不断发展,在 Spring 官方压缩包中包含的模块对应的 jar 也越来越多。

如果希望下载官方压缩包,查看所有 jar 包,可以通过下面链接下载。在 Maven 项目中,不需要单独下载下面内容。

友情提示:Spring 6 目前只有源码,没有官方打包的 dist。5.x 和之前的版本都可以下载到官方打包的 dist。

  • 链接地址:https://github.com/spring-projects/spring-framework/tags
  • 链接地址:https://repo.spring.io/libs-release-local/org/springframework/spring/

万丈高楼平地起,首先从最核心模块 Core Container 模块开始讲起。里面包含了 Spring 最核心的功能之一 IoC/DI。


IoC 控制反转

1. IoC 思想

IoC(Inversion of Control,控制反转)是 Spring 框架最核心的思想。简单来说,就是将对象的创建、管理和销毁的控制权从程序员手中交给 Spring 容器来管理。

传统方式:当我们需要一个对象时,直接通过new关键字创建。

UserServiceuserService=newUserService();

IoC 方式:由 Spring 容器创建对象,我们只需要向容器"要"对象即可。

@AutowiredprivateUserServiceuserService;

2. IoC 的好处

  • 降低耦合度:对象之间的依赖关系由容器管理,代码之间不再硬编码
  • 提高可维护性:修改实现类时,不需要修改调用方的代码
  • 便于测试:可以轻松替换为 Mock 对象进行单元测试
  • 统一管理:对象的生命周期由容器统一管理

3. IoC 的两种实现方式

依赖查找(DL)

通过容器提供的 API 主动查找需要的对象。

ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");UserServiceuserService=context.getBean("userService",UserService.class);
依赖注入(DI)

容器在创建对象时,自动将依赖的对象注入到当前对象中。这是 Spring 推荐的方式。


DI 依赖注入

1. 什么是 DI

DI(Dependency Injection,依赖注入)是 IoC 的具体实现方式。当 Spring 容器创建对象时,自动将对象所依赖的其他对象注入给它。

2. 依赖注入的三种方式

构造方法注入
publicclassUserService{privateUserDaouserDao;// 通过构造方法注入publicUserService(UserDaouserDao){this.userDao=userDao;}}

XML 配置:

<beanid="userDao"class="com.example.dao.UserDao"/><beanid="userService"class="com.example.service.UserService"><constructor-argref="userDao"/></bean>
Setter 方法注入
publicclassUserService{privateUserDaouserDao;// 通过 Setter 方法注入publicvoidsetUserDao(UserDaouserDao){this.userDao=userDao;}}

XML 配置:

<beanid="userDao"class="com.example.dao.UserDao"/><beanid="userService"class="com.example.service.UserService"><propertyname="userDao"ref="userDao"/></bean>
注解注入(最常用)
@ServicepublicclassUserService{@AutowiredprivateUserDaouserDao;}

3. 常用注入注解

注解说明
@Autowired按类型自动装配,Spring 官方推荐
@Resource按名称自动装配,JDK 提供的注解
@Inject和 @Autowired 类似,需要额外引入依赖
@Qualifier配合 @Autowired 使用,指定具体 Bean 名称

Spring 容器

1. 什么是 Spring 容器

Spring 容器是 Spring 框架的核心,负责创建、配置和管理 Bean 对象。常见的容器实现有:

  • BeanFactory:Spring 最基础的容器,提供基本的 IoC 功能
  • ApplicationContext:BeanFactory 的子接口,功能更强大,企业级开发中常用

2. ApplicationContext 的常见实现类

实现类说明
ClassPathXmlApplicationContext从类路径加载 XML 配置文件
FileSystemXmlApplicationContext从文件系统加载 XML 配置文件
AnnotationConfigApplicationContext基于注解配置的容器
WebApplicationContext专为 Web 应用设计的容器

3. 容器的创建方式

XML 配置方式
<!-- applicationContext.xml --><?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><beanid="userDao"class="com.example.dao.UserDao"/></beans>
ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");UserDaouserDao=context.getBean("userDao",UserDao.class);
注解配置方式
@Configuration@ComponentScan("com.example")publicclassSpringConfig{// 配置类}
ApplicationContextcontext=newAnnotationConfigApplicationContext(SpringConfig.class);
混合配置方式
@Configuration@ImportResource("classpath:applicationContext.xml")publicclassSpringConfig{}

Bean 的作用域

Spring 中的 Bean 可以设置不同的作用域,常见的作用域有:

作用域说明
singleton单例模式,Spring 默认作用域,整个容器只有一个实例
prototype原型模式,每次获取都创建新的实例
request每次 HTTP 请求创建一个实例(仅 Web 应用)
session每个 HTTP Session 创建一个实例(仅 Web 应用)
application每个 ServletContext 创建一个实例(仅 Web 应用)

设置作用域

@Component@Scope("prototype")// 设置为原型模式publicclassUserService{}

XML 配置方式:

<beanid="userService"class="com.example.service.UserService"scope="prototype"/>

Bean 的生命周期

Spring 容器管理 Bean 的完整生命周期,大致分为以下几个阶段:

  1. 实例化:通过构造方法创建 Bean 实例
  2. 属性赋值:为 Bean 的属性注入值
  3. 初始化前:调用BeanPostProcessorpostProcessBeforeInitialization方法
  4. 初始化:执行初始化方法(@PostConstruct或配置的init-method
  5. 初始化后:调用BeanPostProcessorpostProcessAfterInitialization方法
  6. 使用:Bean 准备就绪,可以被使用
  7. 销毁:容器关闭时,执行销毁方法(@PreDestroy或配置的destroy-method

生命周期示例

@ComponentpublicclassUserService{publicUserService(){System.out.println("1. 实例化");}@AutowiredprivateUserDaouserDao;@PostConstructpublicvoidinit(){System.out.println("3. 初始化方法");}publicvoiddoSomething(){System.out.println("4. 使用 Bean");}@PreDestroypublicvoiddestroy(){System.out.println("5. 销毁方法");}}

总结

本文从框架的概念入手,详细介绍了 Spring 框架的发展历程、核心思想和基本使用。Spring 框架的核心是 IoC(控制反转)和 DI(依赖注入),通过将对象的创建和管理交给 Spring 容器,大大降低了代码之间的耦合度,提高了项目的可维护性和可测试性。

学习 Spring 框架的关键在于理解 IoC/DI 的思想,掌握 Bean 的配置方式、作用域和生命周期。在此基础上,可以进一步学习 Spring AOP、Spring MVC、Spring Boot 等更高级的内容。

Spring 框架作为 Java 生态中最核心的框架之一,掌握它将为你的 Java 开发之路打下坚实的基础。希望本文能帮助你快速入门 Spring 框架,开启 Spring 学习之旅!

http://www.jsqmd.com/news/932500/

相关文章:

  • 从达尔文到代码:手把手用Python复现群体遗传学经典分析(XP-CLR/Fst计算实战)
  • 如何3分钟将单张图片转换为专业PSD分层文件:Layerdivider智能分层工具完整指南
  • 哪家沥青施工厂家专业?2026年6月推荐五大评测施工效率价格选择指南 - 品牌推荐
  • 别再死记硬背KMeans公式了!用Python从零实现,带你搞懂聚类算法的‘质心’到底怎么动
  • 超磁致径向微进给机构结构优化、迟滞建模与控制方法【附仿真】
  • 体育馆使用预约平台毕业设计
  • SetDPI:Windows多显示器DPI精准控制的终极方案
  • Power Integrations推出节省空间的超薄型辅助电源参考设计,适用于NVIDIA的Kyber 800VDC AI数据中心应用
  • AI编程-人机协同开发模式
  • 薄板的折弯回弹及拉深成形预测模型优化【附仿真】
  • 2026年近期两江新区合同纠纷律师服务深度解析:首同律所律师团队专业实力与选型指南 - 2026年企业资讯
  • 宠物领养系统的设计与实现毕设
  • 张拉膜车棚专业厂家技术解析:膜结构棚/停车棚膜结构/张拉膜结构雨棚/膜结构停车棚/膜结构充电桩/膜结构学校看台/选择指南 - 优质品牌商家
  • 手把手教你用OpenVoice克隆自己的声音:从安装到生成多语言语音的保姆级教程
  • 2026年国内靠谱控制电缆厂家综合排行盘点:北京,低压电线电缆/光伏电缆/北京朝阳电缆厂三厂/北京电线电缆厂/国标电线电缆/选择指南 - 优质品牌商家
  • 3分钟让Windows 11焕然一新:Win11Debloat一键系统优化指南
  • IT专业大学生AI系统学习全攻略(分阶段可落地版)
  • 2026宁夏监控杆厂家选型攻略:宁夏草坪灯、宁夏道路灯、内蒙交通信号灯、内蒙华灯、内蒙地埋灯、内蒙壁灯、内蒙太阳能柱头灯选择指南 - 优质品牌商家
  • 目标检测损失函数“内卷”史:从IoU到Shape-IoU,我们到底在卷什么?
  • 滑动摩擦副温度场模型应用优化【附仿真】
  • YouTube推新功能提升播客体验:移动模式+自动调速+AI搜索,对标Spotify!
  • Win7镜像下载后别急着装!先用UltraISO检查修改ISO文件的3个关键步骤
  • 2026年6月护栏网厂家推荐:TOP5排名工程防锈评测专业价格 - 品牌推荐
  • IT专业大学生 AI 系统学习全攻略(2026最新·可落地·就业/考研双路线)
  • UI-TARS桌面应用深度解析:多模态AI智能体架构设计与技术实践
  • 2026年6月沥青施工厂家推荐:TOP5评测专业选择指南适用场景案例 - 品牌推荐
  • 微信读书笔记助手终极指南:如何3分钟导出完美Markdown笔记
  • 模拟器改机不求人:用Magisk Delta(狐狸面具)+ LSPosed框架在雷电上玩转模块化
  • Rust 导出 C API 的特征分发设计:在静态与动态之间寻找平衡
  • 基于三维几何模型的经编送经量预测解析方案【附仿真】