深入理解Spring核心技术08---Spring中的各模块详解

       在前面的几篇博客中给大家讲解了一下Spring框架的两个基本概念IOC容器和AOP,相信大家现在对Spring中的这两个部分的基本概念有了一定的认识,好了,那么今天我们就来正式的进入Spring框架的学习了。

        前面提到过,Spring框架就是帮助我们创建对象、管理对象之间的关系,让我们在开发的时候只需要关注具体的业务逻辑,而不用花时间去管理对象与对象之间的联系。我们知道了IOC容器就是用来创建对象的,Spring中的依赖注入就是在创建对象的时候就帮我们建立了对象和对象之间的关系,我们不需要手动的去处理对象和对象之间的关系,这就会大大的提高了我们的开发效率。同样的,spring是支持AOP的,这样就可以很大程度上降低了程序中重复的代码,让我i们的程序更加灵活。前面给大家分别手动实现了IOC容器和AOP。相信大家对他们的实现都原理都有了一定的认识。好了,下面就来进入spring的学习了。

       到今天(2018.10.20)为止,spring最新的版本是Spring5,不过我们先来以spring4的版本来讲解,因为外边的公司目前主要用的还是4.X的版本比较多,公司做项目一般的原则就是求稳不求快,意思就是慎用新技术,优先选择稳定成熟的技术。在Spring4.X中一共有20个模块,我们从网上下载下来的zip包中大家可以发现一共由60个jar包,其中实际上只有20个jar包。

如下图所示:

这是从官网上下在的zip包,我们将其解压后会出现一个文件夹,打开文件夹进入,结构如下图所示:

深入理解Spring核心技术08---Spring中的各模块详解_第1张图片

进入该文件夹后会出现上述文件和文件夹,这里解释一下,docs文件夹下放的是离线的html文档,libs目录下就是我们需要的spring框架的完整jar包,schema文件夹下存放的是约束文件,下面三个文本文件相信大家都应该认识吧,第一个文件是许可证书,第二个文件是需注意事项,第三个文件是关于spring框架的说明,包含了版本更新的说明。好了、关于目录就给大家先介绍到这里了。接着我们打开libs,这个文件夹下的就是我们常说的spring框架的全部内容了,该目录的结构如下图所示:

深入理解Spring核心技术08---Spring中的各模块详解_第2张图片

这里只给出一部分截图,spring4中一共有60个jar包,你可能会好奇,前面不是说spring4只有20个模块吗,为什么会出现60个jar包,其实你仔细观察上图就会发现,这些jar包是3个成一组出现的其中第一个就是我们需要用到的jar包,第二个以javadoc结尾的是该部分的api文档,第三个以source结尾的就是该模块的源码,由于spring框架是个开源的项目,所以我们可以下载他的源码。好了,和大家介绍了spring官网提供的spring目录结构,下面就来给大家详细的解释每个模块的作用,

在前面有一篇博客给大家介绍了spring框架一共分为6个功能模块,每个功能模块里边都至少包含一个jar包。在这里,我们按照 上次分的功能模块分别来解释每个jar的作用,

首先来看核心容器模块,该模块主要由以下5个jar包构成:

深入理解Spring核心技术08---Spring中的各模块详解_第3张图片

 spring-core:这个包就是spring框架的核心类,spring其她的模块一般都会用到这个包中的核心类,换句话说,你只要使用了spring框架,就必须要引入这个包,当然如果你是使用maven这种项目构建工具的话,只要你引入了spring框架中的某一个模块,就会同时给你引入core包。接下来就是spring-bean:该包的作用是spring用来定义bean,接着就是spring的上下文,也就是我们常说的ioc容器,spring-context。同时还有对第三方包提供集成支持的spring-contex-support,最后就是spring-expression。这个包的作用是提供spring表达式语言,使用spring表达式语言可以在运行时查询或者操作对象。好了,spring核心容器主要就是上述5个jar包组成。

接着就是面向切面的aop功能模块了。这个模块主要有以下个jar包组成:

深入理解Spring核心技术08---Spring中的各模块详解_第4张图片

分别是spring-aop和spring-aspects,其中前者是提供基于cglib代理的方式实现aop功能后者是提供基于aspectJ的方式实现aop的功能。

第三个功能模块就是数据访问模块,该模块主要由4个jar包组成:

深入理解Spring核心技术08---Spring中的各模块详解_第5张图片

第一个毫无疑问就是spring-jdbc,这个就不用来解释了吧,相信大家都能看得出来这个jar就是提供使用JDBC访问数据的功能,既然提到了数据库,那么肯定就和操作数据有关系,既然要操作数据,那么不能少了事务吧,我们可以发现,spring-tx这和jar包,因此不难发现,这个jar包就是提供编程式和声明式的事务支持。大家可以想到,操作数据库有很多框架都可以啊,那么spring仅仅只支持JDBC吗,肯定不是的,接着往下看,我们发现了spring-orm和spring-oxm这两个jar包,orm可能大家比较熟悉,就是对象关系映射。spring-orm这个jar包就是提供对象关系映射技术的支持,而OXM技术指的是对象和XML之间的映射,这个功能是在spring3中引入的一个功能,不过用的比较少。

第四个功能模块就是对Web支持的模块,同样的这个模块的功能主要依赖于4个jar包,

深入理解Spring核心技术08---Spring中的各模块详解_第6张图片

首先就是spring-web,这个包提供了基础的web集成的功能,也就是说在web项目中提供spring容器。接下来就是大名顶顶的spring-webmvc,这个模块就是提供了基于servlet的MVC架构实现,据说这个模块是spring作者随便加入的,当初spring的作者Rod Johnson只是为了证明实现实现MVC架构的原理是件非常简单的事,因此就有了spring-mvc.后来由于springMVC得到了大家的认同,成为了最热门的MVC框架,这也是Rod Johnson当时没有预料到的。接下来的就是spring-websocket和spring-webmvc-portlet这两个包了,不难的发现前面一个肯定和套接字有关,该包提供了对socket通信的支持。后面的一个是spring自己实现的一个类似Web MVC的框架,主要包括一个MVC框架和控制器。该模块依赖spring-web包。好了web部分的功能模块介绍完了。

第五个功能模块就是消息,该模块主要一下几个jar包组成。

深入理解Spring核心技术08---Spring中的各模块详解_第7张图片

首先是对消息架构和协议的支持的spring-messaging,对JMS提供支持的spring-jms。所谓的JMS就是java message service的缩写,意思就是Java消息服务。在web环境中,应用和应用之间通信就是以消息的形式实现的。

好了,前面的5个功能模块的功能所依赖的jar包都给大家介绍完了,后面的还有spring中的测试功能,也就是大家常用的test注解。同样的spring中也提供了支持,

      好了,已经给大家介绍了核心容器的5个包+面向切面的2个包+数据访问的4个包+web支持的4个包+消息支持的2个包+测试的1个包,一共已经介绍了18个包。那么还有两个呢?来看剩下的2个:

深入理解Spring核心技术08---Spring中的各模块详解_第8张图片

其实这两个jar包本质上也是提供AOP的支持,其中spring-instrument主要是用于JVM启动引导的监测代理 ,也就是说提供的是一些类级的工具支持和ClassLoader级的实现,主要用于服务器。而spring-instrument-tomcat毫无疑问就是用于Tomcat的监测代理了,也就是针对tomcat的instrument实现。很多资料上都把这两个jar包划分到aop模块,准确的说也确实是属于aop模块的技术支持,但是我个人还是习惯将这两个jar包单独划分出来,毕竟这两个jar包都是和应用的本地环境有关,而面向切面指的应该是一种程序设计的思维,不应该和某种具体的应用或者环境相结合。因此个人觉得spring-aop和spring-aspetcs划分到aop中比较合适,而 instrument和instrument-tomcat则是和本地环境有着紧密的联系,因此应该单独的划分为一类。

好了,spring框架的各个功能模块的依赖已经给大家介绍完了,到这里相信大家对spring已经有了一定的认识。在后面的章节中打算使用spring做一个项目,根据实际项目来带着大家一起更加深入的学习spring技术栈。

 

 

 

 

 

你可能感兴趣的