不得不知道的 Spring Framework 架构体系

1,895 阅读5分钟

开篇一幅图,后续全靠猜

前言

本篇的内容基本都是来自于Spring官网,主要是了解Spring Framework 项目整体的架构体系。本篇也没有相关原理的解析,只是对Spring Framework 包含的模块做相关的解析。建议英文水准比较高的好哥哥可以经常性的逛一逛Spring 的官网,说不定就会有不一样的发现。像安酱这种英文比较差的话只能用翻译软件来勉强看看,太难了,完全看不懂好吗,专业性的词汇太多了。

概述

本文开篇的话就一幅图,需要注意的是,下图是属于Spring4.3.27.RELEASE版本中的,安酱并没有在5.x版本中找到类似的架构图,所以对应的介绍也是4.3.27.RELEASE版本的。
spring Framework

Core Container

核心容器(Core Container)是由spring-corespring-beansspring-contextspring-context-supportspring-expressionSpring表达式)模块组成。

  1. spring-corespring-beans模块是框架的基本组成部分,提供了包括 IoC 和依赖注入功能。 BeanFactory 是工厂模式的复杂实现。它解决了程序对单例的需求,并允许将依赖项的配置和规范与实际程序逻辑解耦。

  2. 上下文(spring-context)模块是建立在CoreBeans基础模块上的。这是一种以类似于JNDI注册中心的框架样式方式访问对象的方法。 Context模块从Beans模块继承其功能,并增加了对国际化、事件传播、资源加载以及通过Servlet容器创建上下文的支持。上下文模块还支持Java EE功能,例如EJBJMX和基本远程处理。同时,spring-context-support提供了将通用第三方库集成到Spring应用程序上下文中的支持,例如邮件(JavaMail)、调度(Quartz)和模板引擎(FreeMarker)。

  3. spring-expression模块提供了一种功能强大的表达式语言,用于在运行时查询和操作对象视图。它是对JSP 2.1规范中指定的统一表达语言(统一EL表达式)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器、逻辑和算术运算符、命名变量以及按名称从SpringIOC容器中检索对象的内容。

AOP

spring-aop模块提供了一个面向切面编程实现。例如,可以定义方法拦截器和切入点,利用切面技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块。

所谓切面,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

同时,spring-aspects模块提供了对AspectJ的集成。

Instrumentation

spring-instrument模块提供了对检测类的支持和用于特定的应用服务器的类加载器的实现。spring-instrument-tomcat模块包含了用于tomcatSpring检测代理。

Messaging

Spring Framework 4包含一个Spring-messaging模块,该模块具有来自Spring Integration项目的关键抽象,例如MessageMessageChannelMessageHandler等,它们充当基于消息的应用程序的基础。 该模块还包括一组注解,用于将消息映射到方法,类似于基于Spring MVC注解的编程模型。

Data Access/Integration

数据访问与集成(Data Access/Integration)由JDBCORMOXMJMS事务模块组成。

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

  2. spring-tx模块支持对实现特殊接口的类以及所有POJO(普通 Java 对象)进行编程和声明式事务管理。编程式事务需要自己写beginTransactioncommitrollback等事务管理方法,声明式事务是通过注解或配置由Spring自动处理。

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

  4. spring-oxm模块提供了对OXM实现的支持,比如JAXBCastorXML Beans等。

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

Web

Web层由spring-webspring-webmvcspring-websocketspring-webmvc-portlet模块组成。

  1. spring-web模块提供了基本的面向Web的集成功能,例如文件上传功能以及使用Servlet监听器初始化IoC容器等。它还包括HTTP客户端以及Spring远程调用中与web相关的部分。

  2. spring-webmvc模块(即Web-Servlet模块)为web应用提供了模型视图控制(MVC)和REST Web服务的实现。SpringMVC框架可以使领域模型代码和web表单完全地分离,且可以与Spring框架的其它所有功能进行集成。

  3. spring-websocket 提供了对websocket的支持,spring-websocket进一步对原生API的封装,与 Java WebSocket API 标准兼容,并且还提供额外功能。

  4. spring-webmvc-portlet模块(即Web-Portlet模块)提供了用于Portlet环境的MVC实现,并反映了spring-webmvc模块的功能。

Test

spring-test模块支持使用JUnitTestNGSpring组件进行单元测试和集成测试。 它提供了Spring ApplicationContexts的一致加载以及这些上下文的缓存。 它还提供了可用于隔离测试代码的模拟对象。

总结

本篇的话简单的了解了Spring Framework 架构体系下的相关模块,并没有深入的针对于每个模块进行讲解。后面会对某一些模块重点的分析,有一些模块的话就不弄了。

最后关注安安酱,一个热衷于分享干货的公众号。现在关注领取即可Sping源码分析相关资料。