Spring详解简介

article/2025/9/15 13:22:59

90cefd28b2254b21a4fbc639dd5fe77f.jpg1、Spring的简介

 

Spring的英文翻译为春天,可以说是给Java程序员带来了春天,因为它极大的简化了开发。我得出一个公式:Spring = 春天 = Java程序员的春天 = 简化开发。最后的简化开发正是Spring框架带来的最大好处。

 

Spring是一个开放源代码的设计层面框架,它是于2003 年兴起的一个轻量级的Java 开发框架。由Rod Johnson创建,其前身为Interface21框架,后改为了Spring并且正式发布。Spring是为了解决企业应用开发的复杂性而创建的。它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。Spring 的理念:不去重新发明轮子。其核心是控制反转(IOC)和面向切面(AOP)。

 

回到顶部

2、Spring的起源与发展

在2002年10月,由Rod Johnson 编著的书名为《Expert One-to-One J2EE Design and Development》一书中,对Java EE 系统框架臃肿、低效、脱离现实的种种现状提出了质疑,并阐述了 J2EE 使用 EJB 开发设计的优点及解决方案,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。然后以此书为指导思想,他编写了interface21框架,这是一个力图冲破J2EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。同年他又推出了一部堪称经典的力作《Expert one-on-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着Java开发者程序设计和开发的思考方式。在该书中,作者根据自己多年丰富的实践经验,对EJB的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。至此一战功成,Rod Johnson成为一个改变Java世界的大师级人物。值得注意的是,Rod Johnson是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。

 

Spring框架自从发布以来,就得到快速发展,经过时代的验证,现在已经是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。从2004发布的第一个Spring版本,到现在已经更新到第五个Spring版本了,我们下面来看看各个版本的变化。

 

image

 

(1) Spring 1.x

 

在2004年3月24日,Spring Framework 1.0 final正式发布,Spring 1.0当时只包含一个完整的项目,他把所有的功能都集中在一个项目中,其中包含了核心的IOC、AOP,同时也包含了其它的诸多功能,例如:JDBC、Mail、ORM、事务、定时任务、Spring MVC等等。由于Spring超前的眼光和博大的精神,在第一个版本的时候已经支持了很多第三方的框架,例如:Hibernate、ibatis、模板引擎等。所有自发布以来,Spring 框架迅速发展。但是此时的Spring只支持基于XML的配置。

 

(2) Spring 2.x

 

Spring 2.0 于 2006年10月发布,到那时,Spring的下载量已经超过了 100 万。Spring 2.0中新增的特性有:具有可扩展的 XML 配置功能,用于简化 XML 配置,即对注解的支持,支持了基于注解的配置,支持 Java 5,额外的 IoC 容器扩展点,支持动态语言(BeanShell)。

 

2007年11月Interface21公司更名为SpringSource。同时发布了Spring 2.5。 Spring 2.5中的主要新功能包括支持Java 6 和Java EE 5,支持配置注释,支持自动检测和兼容组件的类路径和OSGi兼容bundle。2007年,SpringSource从benchmark capital获得了1000万美元A轮投资。

 

2009年8月,SpringSource以4.2亿美元被VMWare收购,SpringSource又在几周内收购了cloud foundry,这是一家云PaaS供应商。

 

(3) Spring 3.x

 

Spring 3.0 于2009 年 12 月发布,此时的Spring正式托管到GitHub上,我们可以GitHub的网站查看:https://github.com/spring-projects/spring-framework,Spring 3.0 增加许多重要特性,如重组模块系统,支持 Spring 表达式语言,基于 Java 的 bean 配置(JavaConfig),支持嵌入式数据库(如 HSQL,H2 和 Derby),模型验证/ REST 支持和对 Java EE 的支持。

 

2011年和2012年发布了许多3.x系列的小版本。2012年7月,Rod Johnson离开了Spring团队。2013年4月,VMware和EMC通过GE投资创建了一家名为Pivotal的合资企业。所有的Spring项目都转移到了Pivotal。

 

(4) Spring 4.x

 

2013年12 月,Pivotal 宣布发布Spring框架4.0。Spring 4.0 是 Spring 框架的一大进步,它包含了对Java 8 的全面支持,支持Lambda表达式的使用,更高的第三方库依赖性(groovy 1.8+,ehcache 2.1+,hibernate 3.6+等),提供了对@Scheduled和@PropertySource重复注解的支持,提供了空指针终结者Optional,对核心容器进行增加:支持泛型的依赖注入、Map的依赖注入、Lazy延迟依赖的注入、List注入、Condition条件注解注入、对CGLib动态代理类进行了增强,对groovy DSL for bean 定义支持,Spring MVC基于Servlet 3.0 开发,并且为了方便Restful开发,引入了新的RestController注解器注解,同时还增加了一个AsyncRestTemplate支持Rest客户端的异步无阻塞请求,对 websockets 的支持以及对泛型类型的支持作为注入 bean 的限定符。

 

2014 年至 2017 年期间发布了许多 Spring 框架 4.xx 系列版本。

 

(5) Spring 5.x

 

Spring 5.0于 2017年 9月28日发布了通用版本 (GA)。Spring 5.0开始支持Java EE 7,同时兼容JDK9,但是Spring 5的运行环境最低要求是Java8以上,全面支持Servlet 3.1。其中新增的响应式编程是 SpringFramework5.0 最重要的特性之一、WebFlux框架(全新的模块Spring WebFlux用于替代老的 Spring-webmvc)、对Kotlin也有了更好的支持等等。

 

目前最新的版本如下(https://spring.io/projects/spring-framework#learn):

 

image

 

由于Spring一直在保持更新,而更新的内容都是做一些优化或者是新增一些特性,之前版本的特性基本都会保留,所以我们完全可以直接使用最新版本,本系列文章都使用的是Spring5。

 

回到顶部

3、Spring的组成模块

Spring框架包含的功能大约由20个小模块组成。这些模块按组可分为核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP和Aspects)、设备(Instrumentation)、消息(Messaging)和测试(Test)。如下图所示:

 

image

 

下面对各个模块进行详细介绍:(这些模块我们也可以在Spring的GitHub上查看到:https://github.com/spring-projects/spring-framework)

 

(1) 核心容器(Core Container)——Beans、Core、Context、Expression

 

该层由4个模块组成:spring-beans spring-core spring-context spring-expression(spring expression Language,SpEl) 。它们对应的jar包如下:

 

spring-core:该模块是依赖注入IoC与DI的最基本实现。

spring-beans:该模块是Bean工厂与bean的装配。

spring-context:该模块构架于核心模块之上,它扩展了 BeanFactory,为它添加了 Bean 生命周期控制、框架事件体系以及资源加载透明化等功能。ApplicationContext 是该模块的核心接口,它的超类是 BeanFactory。与BeanFactory 不同,ApplicationContext 容器实例化后会自动对所有的单实例 Bean 进行实例化与依赖关系的装配,使之处于待用状态。

spring-context-indexer:该模块是 Spring 的类管理组件和 Classpath 扫描。

spring-context-support:该模块是对 Spring IOC 容器的扩展支持,以及 IOC 子容器。

spring-expression:该模块是Spring表达式语言块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。

(2) 数据访问与集成(Data Access/Integration)——Jdbc、Orm、Oxm、Jms、Transactions

 

该层由spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 个模块组成。它们对应的jar包如下:

 

spring-jdbc:该模块提供了 JDBC抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。

spring-tx:该模块支持编程式事务和声明式事务,可用于实现了特定接口的类和所有的 POJO 对象。编程式事务需要自己写beginTransaction()、commit()、rollback()等事务管理方法,声明式事务是通过注解或配置由 spring 自动处理,编程式事务粒度更细。

spring-orm:该模块提供了对流行的对象关系映射 API的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring 的其它功能整合,比如前面提及的事务管理。

spring-oxm:该模块提供了对 OXM 实现的支持,比如JAXB、Castor、XML Beans、JiBX、XStream等。

spring-jms:该模块包含生产(produce)和消费(consume)消息的功能。从Spring 4.1开始,集成了 spring-messaging 模块。

(3) Web——Web、Webmvc、WebFlux、Websocket

 

该层由 spring-web、spring-webmvc、spr

 


http://chatgpt.dhexx.cn/article/bnAHPVjk.shtml

相关文章

spring 详细讲解

有人说,“Java程序员都是Spring程序员”,老三不太赞成这个观点,但是这也可以看出Spring在Java世界里举足轻重的作用。 基础 1.Spring是什么?特性?有哪些模块? Spring Logo 一句话概括:Spring…

JAVA框架Spring 全面详解(学习总结)

Spring 1.Spring 全面详解 1.1简介 ◆ Spring:春天 给软件行业带来了春天 ◆ 2002,首次推出了Spring框架的雏形:interface21框架 ◆ Spring框架即是以interface21框架为基础经过重新设计,并不断丰富其内涵,于2004…

Spring的事务详解

事务简介 事务在逻辑上是一组操作,要么执行,要不都不执行。主要是针对数据库而言的,比如说 MySQL。 为了保证事务是正确可靠的,在数据库进行写入或者更新操作时,就必须得表现出 ACID 的 4 个重要特性: 原…

java系列之Spring详解

一、Spring简介 1.1 简介 关于spring的简介,可以查看百度百科,下面内容部分来自百度百科 Spring框架是针对软件开发过程中的复杂性而创建的。其使用javaBean来完成以前只可能由EJB完成的事情。 2002年,Rod Jahnson首次推出了Spring框架雏形…

Spring全面详解

—————版本Spring5.x————— ——编译器IntelliJ IDEA 2020.2.3 —— <-- 该文章有点老旧&#xff0c;停止了更新&#xff0c;请查看Spring5最新文章&#xff0c;目前已经书写完成 --> Spring5全面详解 它会持续更新&#xff0c;你所看到的不是最终版本。 如…

Spring-全面详解(学习总结)

Spring 1.简介 1.1.简介 简介 Spring : 春天 —>给软件行业带来了春天 2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日&#xff0c;Spring框架以interface21框架为基础&#xff0c;经过重新设计&#xff0c;发布了1.0正式版。 …

spring超全面详解

spring概述 Spring 是于2003年兴起的一款轻量级的,非侵入式的IOC和AOP的一站式的java开发框架 为简化企业级应用开发而生. 1.轻量级: 就是指spring核心功能的jar包不大 2.非侵入式: 我们的业务代码不需要继承或实现spring中任何的类或接口 3.IOC: 控制反转 就是把创建…

Spring全面详解(学习总结)

Spring FrameWork一、 前言二、IOC(控制反转)2.1 对于IOC的理解2.2如何使用IOC2.3配置文件的解读2.4IOC容器创建bean的两种方式2.5从IOC容器中取bean2.6bean的属性如果包含特殊字符 三、DI(依赖注入)四、Spring中的bean五、Spring中的继承六、Spring的依赖七、Spring读取外部资…

查看Linux的用户权限(转载)

&#xff08;转&#xff09;Linux查看用户及其权限管理 查看用户 请打开终端&#xff0c;输入命令&#xff1a; $ who am i或者 $ who mom likes输出的第一列表示打开当前伪终端的用户的用户名&#xff08;要查看当前登录用户的用户名&#xff0c;去掉空格直接使用 whoami …

linux查看登录用户

1&#xff0c;w w,显示目前登入系统的用户信息 -f  开启或关闭显示用户从何处登入系统。 -h  不显示各栏位的标题信息列。 -l  使用详细格式列表&#xff0c;此为预设值。 -s  使用简洁格式列表&#xff0c;不显示用户登入时间&#xff0c;终端机阶段作业和程序所耗费…

Linux下查看当前用户和所属用户组方法总结

1、查看当前用户 &#xff08;1&#xff09;whoami &#xff08;2&#xff09;id -un &#xff08;3&#xff09;who -H &#xff08;4&#xff09;who&#xff08;查看当前登陆的所有用户&#xff0c;和who -H功能差不多&#xff09; 2、查看当前用户所属的组 &#xff08…

linux如何查看所有的用户和组信息?

首先打开终端&#xff08;这里是Ubuntu系统&#xff09;&#xff0c;其他的打开命令界面即可 然后输入命令行cat /etc/passwd&#xff0c;直接按下回车键即可 然后这里就会显示很多的信息&#xff0c;所有的用户都在这里面了 然后就是查看所有的组&#xff0c;同样的方法…

linux 查看用户信息

目录 /etc/passwd id命令 whois命令 whoami命令 who命令 w命令 finger命令 vlock命令 /etc/passwd 有的用户信息在根目录 /etc/passwd 文件内&#xff0c;而passwd的所有权限是root用户及root组用户&#xff0c;所有想要查看所有用户&#xff0c;需要root用户登录系统…

linux查看所有用户命令

1、Linux里查看所有用户 (1)在终端里.其实只需要查看 /etc/passwd文件就行了. (2)看第三个参数:500以上的,就是后面建的用户了.其它则为系统的用户. 或者用cat /etc/passwd |cut -f 1 -d : 2、用户管理相关命令 useradd命令 useradd 选项 用户名 -d 目录,指定用户主目录,如…

Linux命令之查看登录用户列表users

概述 users 命令 用于显示当前登录系统的所有用户的用户列表。每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话&#xff0c;那他的用户名将显示相同的次数。 注&#xff1a;该命令与 who、w 类似。不过该命令只会显示登录用户名&#xff0c;信息简略。 语法…

Linux 系统中如何查看当前所有登录的用户

导读今天我们简单介绍下在 Linux 系统中列出登录用户的几种方法。 在多用户的 Linux 系统中&#xff0c;有时候会有查询当前已登录到系统中用户的需求。比如因某种原因要​​注销某个用户​​​。 今天我们简单介绍下在 Linux 系统中列出登录用户的几种方法。 我们所介绍的这…

查看linux用户密码

需要root用户 用户名在/etc/passwd这个文件中&#xff1b; 密码在/etc/shadow中 cat /etc/passwd cat /etc/shadow root:$6$1WtyW6O0baQmTkDG$o.YXXTOZSb7hP4HitigzaW/mZS433aSFpancmyNKYxU/59FuPVlIeVNBUKQQVgzx3kszkQAxo6C2wjrRbv0VZ.::0:99999:7::: 格式解释 {用户名}…

linux查看用户名

【步骤一】cat /etc/passwd cat /etc/passwd查看所有的用户信息&#xff0c;详情如下图 【步骤二】cat /etc/passwd|grep 用户名 cat /etc/passwd|grep 用户名&#xff0c;用于查找某个用户&#xff0c;如下图 【步骤三】cat /etc/group cat /etc/group查看所有组信息&#x…

linux如何查看用户

【步骤一】cat /etc/passwd cat /etc/passwd查看所有的用户信息&#xff0c;详情如下图 【步骤二】cat /etc/passwd|grep 用户名 cat /etc/passwd|grep 用户名&#xff0c;用于查找某个用户&#xff0c;如下图 【步骤三】cat /etc/group cat /etc/group查看所有组信息&…

linux下查看当前用户、所有用户的方法

注&#xff1a; 1、以下测试在ubuntu 9.10上进行&#xff0c;其他平台未测试。 2、这个只是我个人的理解&#xff0c;不一定完全正确 3、版权所有&#xff0c;转载请注明作者和出处 一、查看当前用户 1、shell终端中输入&#xff1a;who 当前用户为&#xff1a;book&#xf…