Spring详解简介

news/2024/7/24 8:08:45 标签: java

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://www.niftyadmin.cn/n/201102.html

相关文章

【Spring Cloud Alibaba】4.创建服务消费者

文章目录简介开始搭建创建项目修改POM文件添加启动类添加配置项添加Controller添加配置文件启动项目测试访问Nacos访问接口查看端点检查简介 接下来我们创建一个服务消费者,本操作先要完成之前的步骤,详情请参照【Spring Cloud Alibaba】Spring Cloud A…

Linux Redis主从复制 | 哨兵监控模式 | 集群搭建 | 超详细

Linux Redis主从复制 | 哨兵监控模式 | 集群搭建 | 超详细一 Redis的主从复制二 主从复制的作用三 主从复制的流程四 主从复制实验4.1 环境部署4.2 安装Redis(主从服务器)4.3 修改Master节点Redis配置文件 (192.168.163.100)4.4 修改Slave节点Redis配置文…

chatgpt+机器人控制器融合(一)

当今机器人技术面临的挑战,以及 ChatGPT 能提供的帮助 目前机器人的操作流是从工程师或技术用户开始,需要他们将任务需求转换为系统代码。工程师会处于工作流程的回路中,他们需要不断编写新的代码和规范来纠正机器人的行为。总得来说&#x…

多模态模型学习1——CLIP对比学习 语言-图像预训练模型

多模态模型学习1——CLIP对比学习 语言-图像预训练模型学习前言什么是CLIP模型代码下载CLIP实现思路一、网络结构介绍1、Image Encodera、PatchPosition Embeddingb、Transformer EncoderI、Self-attention结构解析II、Self-attention的矩阵运算III、MultiHead多头注意力机制IV…

SeNet论文解读/总结

此文章为深度学习在计算机视觉领域的图片分类经典论文SeNet(Squeeze-and-Excitation Networks)论文总结。 此系列文章是非常适合深度学习领域的小白观看的图像分类经典论文。系列文章如下: AlexNet:AlexNet论文解读/总结_alexnet…

【语音唤醒】TC-ResNet:移动设备上实时关键词检测的时域卷积算法

Github开源仓库:https://github.com/hyperconnect/TC-ResNet论文下载链接:https://arxiv.org/abs/1904.03814 本文提出了一种适用于移动设备上实时语音唤醒的时域卷积。与大多数基于2D卷积的KWS方法不同,KWS方法需要深度架构来完全捕获低频域…

Hadoop之Yarn篇

目录 ​编辑 Yarn的工作机制: 全流程作业: Yarn的调度器与调度算法: FIFO调度器(先进先出): 容量调度器(Capacity Scheduler): 容量调度器资源分配算法&#xff1…

自然语言处理(八):Lexical Semantics

目录 1. Sentiment Analysis 2. Lexical Database 2.1 What is Lexical Database 2.2 Definitions 2.3 Meaning Through Dictionary 2.4 WordNet 2.5 Synsets 2.6 Hypernymy Chain 3. Word Similarity 3.1 Word Similarity with Paths 3.2 超越路径长度 3.3 Abstra…