01-Spring整体架构

Spring Framework Logo


开坑前言

作为一个开发者,阅读源码是一种非常好的学习方式,在我们日常工作或者学习中,或多或少会接触到一些开源代码,例如Java中的SSH, mybatis等,这些源码的普及和应用程度远远超过我们的想象,很多人也不断的推动和完善这些代码,有着多年积淀,不管我们当前是什么水平,阅读这些源码可以更加熟练使用,让我们程序设计更加完美,让我们思维方式更为开阔,纵观身边的朋友,能够通读源码的人确实不多,究其原因,无外乎

  1. 时间精力有限,不愿意开始着手;
  2. 复杂度太高了,面对庞大的环环相扣的源码体系,无从下手,无法驾驭;
  3. 耐心或者说毅力不够,以为自己能见微知著,殊不知却是盲人摸象。

无论基于什么情况,放弃对源码的阅读始终难免留下遗憾,因为失去了和大师学习的机会,而且是自己亲手放弃的。开这个坑,也是计划通过博客记录,做出经验沉淀,不为传授,只为记录,在开始阅读时,我选择了几本书作为辅助工具,辅佐我作为一个源码阅读的入口,因为面对好几个MB的源码,我也照样无从下手。

1 Spring的整体架构

如下图所示,spring框架包含很多功能集合,约20个模块
Spring Framework overview
这些模块分别为:

(1) Core container

核心容器,包括了Core, Beans, Context和Expression Language模块。

Core和Beans模块是框架的基础部分,提供了Ioc和DI特性,这里的基础概念是BeanFactory,他提供对Factory模式的实现来消除程序单例模式的需要,并真正的让程序逻辑中分离出依赖关系和配置。

  • Core模块主要包含Spring框架基本的核心工具类,Spring的其他组件都要使用这个包;
  • Beans模块是所有应用都要用到的,包含访问配置文件、创建和管理bean以及进行IoC/DI操作相关的类。
  • Context模块构建与Core与Beans之上,提供了一种类似与JNDI注册器的框架式对象访问方法,Context继承Beans特性,为Spring核心提供了大量的扩展,添加了对国际化、事件传播、资源加载核对Context的透明创建支持,支持J2EE的一些特性,EJB,JMX和基础的远程处理,其中ApplicationContext是Context模块的关键。
  • Expression Language模块提供了一个强大的表达式语言用于在运行时查询和操作对象,扩展了JSP expression language。

(2) Data access/Integration

Data access/Integration层包含了JDBC、ORM、OXM、JMS和Transation模块,其中:

  • JDBC模块提供了一个JDBC抽象层,对各类数据库进行了封装;
  • ORM模块熟悉的有Hibernate、Mybatis提供了一个数据访问层。
  • OXM框架提供了一个对Object/XML映射实现的抽象层,Object/XML映射实现包括JAXB、Castor、XMLBeans、JiBx、Xstream。(其实我觉得Object/Json方式比OXM更好)
  • JMS主要包含了一些制造和消费消息的特性;
  • Transation模块支持编程和声明性事物的管理,这些事物类必须实现特定的接口,并且对所有的POJO都使用。

(3) Web

Web模块是简历在Servlet程序模块之上,Spring兹慈与其他文本框架Struts的集成,Web模块还简化了处理多中请求及参数绑定的工作;好汉了Web、Web-Servlet、Web-struts和Web-Prolet模块,具体说明如下:

  • Web模块:提供了基础的面向Web的集成特性,例如,多文件上传,使用servlet listeners初始化Ioc容器以及一个面向web的应用上下文;
  • Web-Servlet模块:该模块包含Spring的MVC实现,使得模型范围内的代码和web form之间能够清晰的分开并能与Spring框架的其他特性集成在一起;
  • Web-Struts模块:提供了对struts的兹慈,但是在3.0后已经deprecated了。
  • Web-Porlet模块:提供了Porlet环境和Web-Servlet模块的MVC实现(在需要写Porlet应用时可以直接用这个模块,不过在如今各类webservice当道的情况下,RSS都比较少见了,貌似一般不会选型这个)。

(4) AOP

AOP模块提供了一个符合标准的面向切面编程实现,可以降低耦合性,利用Source-level的注解机制(元数据功能),还可以讲各种行为信息整合到代码里,类似.net中的attribute(不是parameter);Spring AOP提供了事物管理服务,

(5) Test

Test模块支持各种测试框架。


作者 @Brady
2016年8月10日