读Spring源码记录(三)--先看整体架构

“闲来静处,且将诗酒猖狂,唱一曲归来未晚,歌一调湖海茫茫。”时间如白驹过隙,匆匆一回眸,便是两周过去,学习spring的过程漫长而孤独,长路漫漫,且行且看。

从小学习的经验告诉我,了解一个东西,需要由表及里,从整体到局部到研究,学习spring我觉得亦是如此。下面是我学习过程中整理的。

一、spring是什么?

首先从官方出发,看看官网给出的描述:
The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.
A key element of Spring is infrastructural support at the application level: Spring focuses on the "plumbing" of enterprise applications so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments.
这段英文我都能看懂,相信就不需要翻译了,归根结底,spring还是一个工具,让我们使用开发者能够更专注于自己都业务,这样的是把我们从各种配置中释放出来,这也提现了开源的意义,不必造重复的轮子,让我们站在巨人的肩膀上更上一层楼,而不是从地基搭建起。
言归正传,spring的模块大概有22个左右,不过主要模块在于Beans,Core,Context,SpEL,分别对应spring源码中的spring-beans,spring-core,spring-context,spring-expression。

spring模块

二、Spring模块之前的关系

注意一下:不同的spring模块都可以在源码对应的模块的poject-name.gradle文件中,例如:spring-messaging模块,在src中的spring-messaging.gradle可以看到该模块依赖了哪些模块

查看模块依赖

学习使用spring的时候,我们都会学到两个很关键的概念依赖注入(DI:Dependency Injection)面向切面(AOP:Aspect Oriented Programming),依赖注入的实现就在spring-core中,不过不要看spring模块图就以为整个spring架构是一个分层级结构,最下面模块是spring-test,其实这个图主要展现的是spring分为五个大模块:Core Container、Aop、Message、Data Access/Integration、Web、Test,下面这个图是各个模块之间的依赖关系,这两个图结合一下应该能很好的帮助理解spring架构。

spring依赖关系

Core模块包含:
spring-beans:依赖注入IoC与DI的最基本实现;
spring-core:Bean工厂与bean的装配;
spring-expression:spring表达式语言;
spring-context:spring的context上下文即IoC容器,以类似JNDI注册表的框架式方式访问对象的一种手段。上下文模块从Beans模块继承其功能,并增加对国际化的支持(如使用资源组),事件传播,资源加载和上下文的透明创建,比如Servlet容器。上下文模块也支持JavaEE的功能,诸如EJB,JMX和基本远程调用。ApplicationContext接口是上下文模块的焦点;
spring-context-support:支持常见的第三方库集成到Spring应用程序环境中,特别是缓存(EhCache,JCache)和调度(CommonJ,Quartz)。
spring-context其实是构建在spring-core和spring-beans上的,可以从上图的依赖关系看出来。下图是核心模块的依赖关系图。其中没有标注spring-context-support。


core模块依赖

Aop大模块:
spring-aop:面向切面编程;
spring-aspects:集成自AspectJ框架,主要是为SpringAOP提供多种AOP实现方法;
spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器


Aop大模块

Message模块:
spring-messaging:包含来自Spring Integration项目(如Message,MessageChannel,MessageHandler)的关键抽象,以及基于消息的应用的基础的其他部分。模块还包含了映射消息到方法的注解集合,类似Spring MVC基于编程方式的注解,主要职责是为Spring框架集成一些基础的报文传送应用。


spring-message依赖

Data Access/Integration模块:
spring-jdbc:提供了JDBC抽象层,不再需要处理繁杂的JDBC编码以及数据库供应商特定错误码的解析;
spring-tx:支持为实现指定接口的类以及所有POJOs(普通Java对象)的编程和声明式事务管理,简单说来,就是SpringJDBC事务控制实现模块;
spring-orm:为流行的对象关系映射APIs提供集成层,包括JPAHibernate。通过spring-orm模块,你可以将O/R映射框架组合Spring提供的其他功能一起使用,比如前面提及的简单声明式事务管理功能;
spring-oxm:为Object/XML映射实现提供抽象层,诸如JAXB,Castor,JiBX和XStream;
spring-jms:模块(Java消息服务)包含生产和消费消息的功能。从Spring框架4.1版本开始,它提供与spring-messaging模块的集成

Data Access/Integration模块.png

Web模块:
spring-web:基础web功能,如文件上传,以及通过Servlet监听器和面向web的应用上下文初始化IOC容器。同时还包含HTTP客户端和Spring远程支持的web相关部分;
spring-web:为Spring提供了最基础Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IOC容器,也包含一些与Web相关的支持。
spring-webmvc:众所周知是一个的Web-Servlet模块,实现了SpringMVC(model-view-Controller)的Web应用。
spring-websocket:主要是与Web前端的全双工通讯的协议。(有待考证)
spring-webflux:是一个新的非堵塞函数式ReactiveWeb框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。
web依赖

spring-websocket依赖

spring-webFlux依赖

Test模块:
spring-test:支持使用JUnit或TestNG进行Spring组件的单元测试集成测试。它提供了Spring ApplicationContexts的一致加载和缓存。同时提供用于隔离测试的模拟对象(mock objects)

spring-test依赖.png

三、写在后面的话

这都是我收集到到资料,其中有不正确的,欢迎发现的朋友指出,其次,学习中,对spring有个整体的认知,算是正式开始spring之旅,希望接下来坚持下去!!感谢所有收集到的资料的作者,谢谢他们,我学到了很多!!

最后写一句我很喜欢的话,“不悔梦归处,只恨太匆匆”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351