Spring5系统架构

Spring总共大约有20个模块,由1300多个不同的文件构成。而这些组件被分别整合在核心容器(CoreContainer)、AOP(AspectOrientedProgramming)和设备支持(Instrmentation)、数据访问及集成(DataAccess/Integeration)、Web、报文发送(Messaging)、Test,6个模块集合中。以下是Spring5的模块结构图:

Spring5官网的说明:

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

1.核心容器:由spring-beans、spring-core、spring-context和spring-expression(SpringExpressionLanguage,SpEL)4个模块组成。

spring-beans和spring-core模块是Spring框架的核心模块,包含了控制反转(InversionofControl,IOC)和依赖注入(DependencyInjection,DI)。BeanFactory接口是Spring框架中的核心接口,它是工厂模式的具体实现。BeanFactory使用控制反转对应用程序的配置和依赖性规范与实际的应用程序代码进行了分离。但BeanFactory容器实例化后并不会自动实例化Bean,只有当Bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。

spring-context模块构架于核心模块之上,他扩展了BeanFactory,为她添加了Bean生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等,ApplicationContext是该模块的核心接口,她是BeanFactory的超类,与BeanFactory不同,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。

spring-expression模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统EL,但提供了额外的功能,最出色的要数函数调用和简单字符串的模板函数。这种语言的特性是基于Spring产品的需求而设计,他可以非常方便地同SpringIOC进行交互。

2.AOP和设备支持:由spring-aop、spring-aspects和spring-instrument3个模块组成。

spring-aop是Spring的另一个核心模块,是AOP主要的实现模块。作为继OOP后,对程序员影响最大的编程思想之一,AOP极大地开拓了人们对于编程的思路。在Spring中,他是以JVM的动态代理技术为基础,然后设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等,同时,Pointcut接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入。

spring-aspects模块集成自AspectJ框架,主要是为SpringAOP提供多种AOP实现方法。

spring-instrument模块是基于JAVASE中的"java.lang.instrument"进行设计的,应该算是AOP的一个支援模块,主要作用是在JVM启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现AOP的功能。在分类里,我把他分在了AOP模块下,在Spring官方文档里对这个地方也有点含糊不清,这里是纯个人观点。

3.数据访问及集成:由spring-jdbc、spring-tx、spring-orm、spring-jms和spring-oxm5个模块组成。

spring-jdbc模块是Spring提供的JDBC抽象框架的主要实现模块,用于简化SpringJDBC。主要是提供JDBC模板方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程,主要实现类是JdbcTemplate、SimpleJdbcTemplate以及NamedParameterJdbcTemplate。

spring-tx模块是SpringJDBC事务控制实现模块。使用Spring框架,它对事务做了很好的封装,通过它的AOP配置,可以灵活的配置在任何一层;但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的。其实,事务是以业务逻辑为基础的;一个完整的业务应该对应业务层里的一个方法;如果业务操作失败,则整个事务回滚;所以,事务控制是绝对应该放在业务层的;但是,持久层的设计则应该遵循一个很重要的原则:保证操作的原子性,即持久层里的每个方法都应该是不可以分割的。所以,在使用SpringJDBC事务控制时,应该注意其特殊性。

spring-orm模块是ORM框架支持模块,主要集成Hibernate,JavaPersistenceAPI(JPA)和JavaDataObjects(JDO)用于资源管理、数据访问对象(DAO)的实现和事务策略。

spring-jms模块(JavaMessagingService)能够发送和接受信息,自SpringFramework4.1以后,他还提供了对spring-messaging模块的支撑。

spring-oxm模块主要提供一个抽象层以支撑OXM(OXM是Object-to-XML-Mapping的缩写,它是一个O/M-mapper,将java对象映射成XML数据,或者将XML数据映射成java对象),例如:JAXB,Castor,XMLBeans,JiBX和XStream等。

4.Web:由spring-web、spring-webmvc、spring-websocket和spring-webflux4个模块组成。

spring-web模块为Spring提供了最基础Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IOC容器,也包含一些与Web相关的支持。

spring-webmvc模块众所周知是一个的Web-Servlet模块,实现了SpringMVC(model-view-Controller)的Web应用。

spring-websocket模块主要是与Web前端的全双工通讯的协议。(资料缺乏,这是个人理解)

spring-webflux是一个新的非堵塞函数式ReactiveWeb框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。

5.报文发送:即spring-messaging模块。

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

6.Test:即spring-test模块。

spring-test模块主要为测试提供支持的,毕竟在不需要发布(程序)到你的应用服务器或者连接到其他企业设施的情况下能够执行一些集成测试或者其他测试对于任何企业都是非常重要的。

Spirng各模块之间的依赖关系

该图是Spring5的包结构,可以从中清楚看出Spring各个模块之间的依赖关系。

如果你想加入Spring源码的学习,笔者的建议是从spring-core入手,其次是spring-beans和spring-aop,随后是spring-context,再其次是spring-tx和spring-orm,最后是spring-web和其他部分。

Spring5(3)---Spring5概述相关推荐

  1. [Spring5]Spring框架概述

    Spring框架概述 1.Spring是轻量级的开源的JavaEE框架 2.Spring可以解决企业应用开发的复杂性 3.Spring有两个核心部分:IOC和Aop a.IOC:控制反转,把创建对象过 ...

  2. 001 spring5框架:java类工程,IOC:实体类表示表关系,AOP,JdbcTemplate模板,事务操作,Spring5 框架新功能:日志,为空注解,函数式风格,juint,Webflux

    1. Spring5 框架(Spring5 Framework)介绍 1.1 概念 1.Spring 是轻量级的开源的 JavaEE 框架 2.Spring 可以解决企业应用开发的复杂性 3.Spri ...

  3. Java架构师Day02-源码分析之Spring5

    Spring 5 基本概念 Spring的XML解析原理 Spring的Bean实例化原理 Spring表达式语言SpEL 赋予属性字面值 引用Bean和属性和方法 计算表达式的值 匹配正则表达式 B ...

  4. Spring5 框架概述 、IOC 容器

    一.Spring5 框架概述 介绍 Spring 是轻量级的开源的 JavaEE 框架 Spring 可以解决企业应用开发的复杂性 Spring 有两个核心部分:IOC 和 Aop (1)IOC:控制 ...

  5. Spring5概述 与 Spring5简单案例

    Spring5概述 1.Spring 是轻量级的开源的 JavaEE 框架2.Spring 可以解决企业应用开发的复杂性3.Spring 有两个核心部分:IOC 和 Aop (1)IOC:控制反转,把 ...

  6. Spring5 概述

    1.Spring5框架概述 (1)Spring是轻量级的开源的JavaEE框架 说明:轻量指依赖的jar包非常少 (2)Spring可以解决企业应用开发的复杂性 (3)Spring有两个核心部分:IO ...

  7. Spring5源码分析系列(三)Spring5概述

    咕泡学院Tom老师视频讲解第三章,对Spring5进行简要介绍,文章参考自Tom老师视频. Spring是一个开源的轻量级JavaSE(Java标准版本)/JavaEE(Java企业版本)开发应用框架 ...

  8. Spring5源码 - 06 Spring Bean 生命周期流程 概述 01

    文章目录 Bean生命周期概述 Demo finishBeanFactoryInitialization(beanFactory) 核心流程 Bean生命周期概述 说到Spring Bean的生命周期 ...

  9. Spring5中文文档【1】Spring框架概述

    1. 概述 官方文档地址 Spring 让开发 Java 企业应用程序变得容易.提供了在企业环境中使用 Java 语言所需的一切,并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并 ...

最新文章

  1. 【 FPGA 】时钟抖动浅记
  2. springboot项目打包运行
  3. python生成10000个样本数据集_python产生随机样本数据
  4. 当map遇上range
  5. 【Python】pandas一行代码绘制26种美图
  6. C11中gets()的函数被删除
  7. SQL:MySQL创建、删除事件
  8. vim编辑器使用详解
  9. 数据是否服从正态分布
  10. 靶向测序的CNV分析简介
  11. 单出口双防火墙双核心冗余_王术芳/海关缴款书抵扣和出口退税操作变化要点解析...
  12. [计算机网络]网络层
  13. 开通了个人微信公众号:slbGTD,准备把GTD相关的内容写成一本书
  14. 大白菜U盘PE重装教程
  15. 低压回路测控终端| 汉光 LPC96P低压回路测控装置
  16. D2D,让通信更简单!
  17. Unable to add window——token android.os.BinderProxy@196e65b8 is not valid;is your activit is running?
  18. linux-DNS域名正向解析、服务程序BIND安装与配置
  19. Tushare的使用感受
  20. 《众妙之门——网页排版设计制胜秘诀》——3.6 网页版式高级教程

热门文章

  1. shiro访问html没有验证码,Shiro在web应用中实现验证码、回显登录失败信息
  2. postgresql表中间加列_PostgreSQL ALTER TABLE命令
  3. 【C语言】数学也没辣么难嘛
  4. OpenMV常用函数整理
  5. libevent源码深度剖析五
  6. linux中同步例子(完成量completion)
  7. linux时间树,linux小知识之查看系统时间
  8. mysql not exists优化_MySQL优化--NOT EXISTS和LEFT JOIN方式差异
  9. Python学习day07 - Python进阶(1) 内置方法
  10. java堆栈信息查看,以及JVM性能查看工具-jconsole+jmap