为什么你要用 Spring?

365bet现场走地盘 ⌚ 2026-02-17 13:08:26 👤 admin 👁️ 9616 ❤️ 834
为什么你要用 Spring?

前言

现代 Spring 几乎成为了 Java 在企业级复杂应用开发的代名词,得益于 Spring 轻量简单的设计哲学和其开放包容的生态圈,确实为廉颇老矣,尚能饭否的 Java 带来了“春天”,但身边有很多同学刚接触 Java 就直接从 Spring 框架开始学习,导致产生了很多疑惑,甚至有很多同学只知道用Spring,并不了解其中的原理,例如:

Spring框架为我们做了什么,没有Spring框架前我们的程序是什么样的?为什么要把对象放在Spring容器里面,为什么我不能直接new对象?为什么要把Sevlet交给Spring MVC管理,我自己写Sevlet处理HTTP请求不行吗?Spring为什么要封装这么多的 Template(JDBCTemplate,RestTemplate等……)它想要干什么?

所以就想到写一篇文章来跟大家解释下使用Spring工具的背后的事情

Spring 框架繁多,生态圈更是遍地开花(Spring Shiro,SpringBoot,SpringCloud 等等),本篇文章不会深入探讨 Spring 每个框架的实现细节,只会大概讲Spring Framework 背后的设计理念和它为我们所做的事情,让大家知其然并知其所以然,可以在用 Spring 的时候能知悉底层和内部细节发生的事情,如果是对于 Spring Frameword 和其生态框架的细节有兴趣的同学,可以官方阅读详尽的文档

传送门:https://spring.io/projects(这应该是我见过写的最好的技术文档之一)

Spring 为我们做了哪些事情?

Spring 全家桶框架众多,但主要的设计原则简单来说,离不开这几点:

通过代码解耦,提高代码灵活性(依赖注入 DI)简化开发,用最少的代码,做最多的事情(AOP,Template)提供公共抽象,屏蔽底层,开箱即用,替换方便(Spring Cache,框架,中间件集成)MVC模型的快速实现(视图解析,数据转换)

下面拆开来说说这几点,为我们带来了什么好处

最后探讨下,如果没有 Spring 用原生的 J2EE 我们的程序会变成什么样

先说说 Spring Framework 的核心功能,DI 依赖注入,AOP 面向切面编程

依赖注入也叫 IOC 控制反转,依赖注入是编程大师 Martin Fowler 提出来的,我个人比较喜欢依赖注入这个名词,感觉比控制反转更具有表达性,也更容易理解

依赖注入为我们做了什么 ?

灵活:提供的面向接口的编程方法,为类和类之间建立更灵活的关系解耦:移除了直接在程序中 new 实例的高耦合做法方便:要替换类的实现,只需要在 Spring 容器中更换声明,无需改动代码那么 AOP 面向切面又为我们做了什么?

消除重复的模板代码(性能监控,异常封装,参数跟踪等……)更代码结构更加整洁,通用的逻辑基本都可以用 AOP 来处理Spring 的声明式事务就是 Spring AOP 的优秀实现案例还为我们做了什么其他的事情?

Spring JdbcTemplate 消除了JDBC API令人诟病的模板代码Spring Cache 提供缓存功能,并且无需关心底层缓存组件细节(Ehcache,Guava,JSR-107 Cache等……)Spring DAO 提供连接池功能,并且无需关心底层连接池组件细节(C3P0,DBCP等……)提供 定时任务功能 集成(Quartz,JDK Timer,Executor)整合ORM框架,测试框架集成快速实现MVC模型,并且集成Sring,数据处理,视图解析等都由Spring处理

以上等等功能,都是 Spring 框架为我们做处理的事情

当然 Spring 生态里还有非常多的框架来简化我们的日常开发的功能开发,提高开发效率,常用的例如:

Spring Boot (无需配置,快速开发,启动,集成生产级的监控指标)Spring Cloud(快速实现微服务的框架,提供系列微服务的组件框架)Spring Shrio(基于角色资源的安全框架,利用AOP实现鉴权等安全访问的功能)Spring Data(提供数据访问实现,包括非关系数据库,关系数据库,云数据服务等)

假如没有 Spring ?

让我们想象一下,假如没有 Spring,我们在做企业级应用开发会大概会发生什么事情?

类和类之间通过 new 建立关系,充满耦合,小处改动都要修改大量代码充满和业务无关的模板代码,10行代码可能只有1行是业务逻辑大量的事务,异常,JDBC的模板处理代码,不仅代码极度脆弱,容易出错,而且可读性极差,基本不可维护你要为每个请求写一个 Servlet 处理,并且自己处理 request/response,Servlet 也充斥着大量重复的模板代码你项目的代码量可能会比现在多很多

以上,你是如何看待 Spring 带来的复杂性和提供的便利性?现在 Spring 体系也越来越庞大,貌似与它刚开始对抗 EJB 的时候所提出的轻量/简单的设计哲学开始背道而驰,关于这点你又是怎么评价呢?个人知识有限,不喜勿喷,欢迎发表评论和分享你的观点和看法。

相关数据

苹果看图猜成语所有答案大全 完整版图文答案攻略

苹果看图猜成语所有答案大全 完整版图文答案攻略

看图猜成语是一款全中文休闲益智游戏,可以和好友一起体验中国古老文化-成语的魅力,成语是我国汉字语言词汇中一部分定型的词组或短句。

02-01 365bet赌城
波兰国家队世界杯主客场球衣发布,图案灵感源于白鹰羽翼

波兰国家队世界杯主客场球衣发布,图案灵感源于白鹰羽翼

当地时间9月15日,波兰足协发布了全新的国家队主客场球衣,球员们将身穿耐克提供的新球衣参加即将到来的欧国联以及年底的世界杯。 全新的

07-10 365bet现场走地盘
Win7系统如何借助format低格命令进行U盘格式化?

Win7系统如何借助format低格命令进行U盘格式化?

对于U盘里面的一些无法删除顽固文件,我们可以将U盘进行格式化,不过很多时候我们会遇到U盘无法格式化的情况,那么这时该怎么办呢?其实

07-20 best365中国官网
从1号至11号!DeepSeek评巴西队史最佳11人:小罗落选

从1号至11号!DeepSeek评巴西队史最佳11人:小罗落选

理由:2002年世界杯冠军绝对主力中卫(穿3号),2010年作为队长带队进入八强。他是现代中卫的标杆之一,身体素质爆炸,上抢凶狠,带球推进

10-13 365bet现场走地盘
电动车多了,维修店生意却越来越艰难,到底因为什么?

电动车多了,维修店生意却越来越艰难,到底因为什么?

[提要] 拥挤的城市,繁忙的工作,生活节奏越来越快的今天,不论是为了工作的效率,还是为了早早能回到家里休息,一辆便捷灵活的交通工具

07-16 365bet赌城
从女性的角度出发,你的“事业线”OK吗

从女性的角度出发,你的“事业线”OK吗

事业线有的指男左女右,手心中明显的三条线,中间那条。 那么女生的话“事业线”就有两种解释了——乳沟 乳沟的形成也就与乳房相关了,

09-30 365bet赌城