spring总共大约20个模块,这些模块被整合在核心容器(Core Container)、AOP和设备支持、数据访问及集成、Web、报文发送、Test 6个模块集合。

组成Spring框架的每个模块集合或者模块都可以单独存在,也可以一个模块或者多个模块联合实现。
模块组成和功能如下:

1、核心容器:spring-beans、spring-core、spring-context、spring-expression 4个模块组成。

  • spring-beans和spring-core模块是Spring框架的核心模块,包含了控制反转(IOC)和依赖注入(DI)。BeanFactory 接口是 Spring 框架中的核心接口,它是工厂模式的具体实现。BeanFactory 使用控制反转对应用程序的配置和依赖性规范与实际的应用程序代码进行了分离。但 BeanFactory 容器实例化后并不会自动实例化 Bean,只有当Bean
    被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。
  • spring-context模块构架于核心模块之上,他扩展了BeanFactory,为她添加了Bean 生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等。ApplicationContext是该模块的核心接口,她是BeanFactory的超类,与BeanFactory不同,ApplicationContext 容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。
  • spring-expression模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统EL,但提供了额外的功能,最出色的要数函数调用和简单字符串的模板函数。这种语言的特性是基于Spring产品的需求而设计,他可以非常方便地同Spring IOC进行交互。

2、AOP和设备支持:spring-aop、spring-aspects、spring-instrument 3个模块组成。

  • spring-aop是Spring的另一个核心模块,是AOP主要的实现模块。在 Spring 中,他是以JVM的动态代理技术为基础,然后设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等。同时,Pointcut接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入。
  • spring-aspects模块集成自AspectJ框架,主要是为SpringAOP提供多种AOP实现方法。
  • spring-instrument模块是基于JAVA SE中的"java.lang.instrument"进行设计的,是 AOP的一个支援模块,主要作用是在JVM启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能, 实现AOP的功能。

3、数据访问及集成:spring-jdbc、spring-tx、spring-orm、spring-oxm、spring-jms五个模块组成。

  • spring-jdbc模块是Spring提供的JDBC抽象框架的主要实现模块,用于简化Spring JDBC。主要是提供JDBC模板方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程,主要实现类是JdbcTemplate、SimpleJdbcTemplate以及 NamedParameterJdbcTemplate。
  • spring-tx模块是Spring JDBC事务控制实现模块。使用Spring框架,它对事务做了很好的封装,通过它的AOP配置,可以灵活的配置在任何一层。事务是以业务逻辑为基础的,一个完整的业务应该对应业务层里的一个方法,如果业务操作失败,则整个事务回滚。持久层的设计则应该遵循一个很重要的原则:保证操作的原子性,即持久层里的每个方法都应该是不可以分割的。
  • spring-orm模块是ORM框架支持模块,主要集成Hibernate,Java Persistence API (JPA) 和Java Data Objects (JDO) 用于资源管理、数据访问对象(DAO)的实现和事务策略。
  • spring-jms模块(Java Messaging Service)能够发送和接受信息,自Spring Framework 4.1以后,还提供了对spring-messaging模块的支撑。
  • spring-oxm模块主要提供一个抽象层以支撑OXM(OXM 是 Object-to-XML-Mapping 的缩写,它是一个O/M-mapper,将java对象映射成 XML数据,或者将XML数据映射成 java对象)。

4、Web:spring-web、spring-webmvc、spring-websocket、spring-webflux 四个模块组成。

  • spring-web模块为Spring提供了最基础Web支持,主要建立于核心容器之上,通过 Servlet或者Listeners来初始化IOC容器,也包含一些与Web相关的支持。
  • spring-webmvc模块是一 个Web-Servlet模块,实现了Spring MVC
    (model-view-Controller)的Web应用。
  • spring-websocket模块主要是与Web前端的全双工通讯的协议。
  • spring-webflux是一个新的非堵塞函数式Reactive Web框架,可以用来建立异步的、非阻塞事件驱动的服务,并且扩展性非常好。

5、报文发送:spring-messaging 1个模块组成。

  • spring-messaging是从Spring4开始新加入的一个模块,主要职责是为Spring框架集成一些基础的报文传送应用。

6、Test:spring-test 1个模块组成。

  • spring-test模块主要为测试提供支持的。

spring5各个模块之间的依赖关系:

spring5源码分析系列(一)——spring5框架模块的更多相关文章

  1. spring5源码分析系列(三)——IOC容器的初始化(一)

    前言: IOC容器的初始化包括BeanDefinition的Resource定位.载入.注册三个基本过程. 本文以ApplicationContext为例讲解,XmlWebApplicationCon ...

  2. spring5源码分析系列(二)——spring核心容器体系结构

    首先我们来认识下IOC和DI: IOC(Inversion of Control)控制反转:控制反转,就是把原先代码里面需要实现的对象创建.依赖的代码,反转给容器来帮忙实现.所以需要创建一个容器,并且 ...

  3. Spring5源码分析(1)设计思想与结构

    1 源码地址(带有中文注解)git@github.com:yakax/spring-framework-5.0.2.RELEASE--.git Spring 的设计初衷其实就是为了简化我们的开发 基于 ...

  4. spring源码分析系列 (3) spring拓展接口InstantiationAwareBeanPostProcessor

    更多文章点击--spring源码分析系列 主要分析内容: 一.InstantiationAwareBeanPostProcessor简述与demo示例 二.InstantiationAwareBean ...

  5. jQuery-1.9.1源码分析系列完毕目录整理

    jQuery 1.9.1源码分析已经完毕.目录如下 jQuery-1.9.1源码分析系列(一)整体架构 jQuery-1.9.1源码分析系列(一)整体架构续 jQuery-1.9.1源码分析系列(二) ...

  6. Thinkphp源码分析系列–开篇

    目前国内比较流行的php框架由thinkphp,yii,Zend Framework,CodeIgniter等.一直觉得自己在php方面还是一个小学生,只会用别人的框架,自己也没有写过,当然不是自己不 ...

  7. MyBatis 源码分析系列文章导读

    1.本文速览 本篇文章是我为接下来的 MyBatis 源码分析系列文章写的一个导读文章.本篇文章从 MyBatis 是什么(what),为什么要使用(why),以及如何使用(how)等三个角度进行了说 ...

  8. spring源码分析系列 (8) FactoryBean工厂类机制

    更多文章点击--spring源码分析系列 1.FactoryBean设计目的以及使用 2.FactoryBean工厂类机制运行机制分析 1.FactoryBean设计目的以及使用 FactoryBea ...

  9. Spring AOP 源码分析系列文章导读

    1. 简介 前一段时间,我学习了 Spring IOC 容器方面的源码,并写了数篇文章对此进行讲解.在写完 Spring IOC 容器源码分析系列文章中的最后一篇后,没敢懈怠,趁热打铁,花了3天时间阅 ...

随机推荐

  1. python Print 输出

    print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 , #!/usr/bin/python # -*- coding: UTF-8 -*- x="a" y=&qu ...

  2. java上传大文件解决方案

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在10G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以10G来进行限制. 第一步: 前端修改 由于项目使用的是BJ ...

  3. 响应式web布局

    通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更精确作用于不同的媒体类型和同一媒体的不同条件.媒体查询的大部分媒体特性都接受min和max用于表达”大于或等于”和”小与或等于”.如:wi ...

  4. Jmeter -- 脚本录制

    步骤如下: 1. 添加http代理服务器(Add -> Non-TestElement -> HTTP(S)Test Script Recorder) 2. 对http代理进行配置,如下图 ...

  5. 7.2 Mybatis

    7.2 Mybatis 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问 ...

  6. (七)C语言之顺序结构

  7. thinkpad T480安装WIN7

    本文转载自http://www.dnxtc.net/zixun/zhuangjijiaocheng/2018-12-01/3256.html 防止忘记 特别把资源集中一下 新买的笔记本预装的WIN10 ...

  8. 将一个SpringBoot工程打成jar包并在控制台执行起来

    JDK:1.8.0_212 IDE:STS4(Spring Tool Suit4 Version: 4.3.2.RELEASE) 工程下载:https://files.cnblogs.com/file ...

  9. MySQL获取距离

    BEGIN ) ), ) ) ) ) ),))),); END

  10. electron关于无边框窗口无法拖拽移动以及点击事件失效的问题

    为了使窗口无边框,使得在某些时候让项目看起来更美观,所以在创建窗口的时候通过设置 frame 属性的值为 false 来创建无边框窗口.但是无边框窗口会产生无法移动的问题,对于这个问题我们可以在渲染进 ...