Spring Framework 系统架构总览图

Spring Framework的模块依赖关系图

Spring Framework各个模块功能说明

Spring核心模块

模块名称 主要功能
Spring-core 依赖注入IOC和DI的基本实现
Spring-beans Bean工厂与Bean的装配
Spring-context 定义基础的Spring的Context上下文即IOC容器
Spring-context-support 对Spring IOC容器的扩展支持,以及IOC的子容器
Spring-context-indexer Spring的类管理组件和Classpath扫描
Spring-expression Spring表达式语言

Spring 切面编程相关

模块名称 主要功能
Spring-Aop 面向切面编程模块
Spring-Aspecrts 集成AspectJ
Spring-Instrument 动态的Class Loading模块

Spring数据访问集成

名称 主要功能
Spring-JDBC Spring提供的JDBC抽象框架主要实现 模块,用于简化JDBC操作
Spring-Tx Spring JDBC事务实现模块
Spring-ORM 主要集成Hibernate,Java Persistence API(JPA)和Java Data Objects JDO
Spring-OXM 将java对象映射成XML数据,或者将XML数据映射成java对
Spring-JMS Java Messaging Service.能够发送和接收信息

Spring Web相关的组件

名称 主要功能
Spring-Web spring-web提供了最基础Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IOC容器
Spring-WebMVC 实现了Spring MVC(model-view-Controller)的Web应用
Spring-WebSocket 主要是与Web前端的全双工通讯的协议
Spring-WebFlux 一个新的非堵塞函数式Reactive Web框架,可以用来建立异步的,非阻塞,事件驱动的服务

Spring通信报文相关

模块名称 主要功能
Spring——Messaging 主要职责是为Spring框架集成一些基础的报文传输应用

Spring测试相关

名称 主要功能
Spring-test 主要为程序测试提供

Spring集成兼容

名称 主要功能
Spring-Framework-BOM BOM of Materials解决Spring的不同模块的依赖版本问题

实现基本功能Spring的思路

  1. 配置阶段

    • 配置Web.xml DisppatcherServler
    • 设定init-param contextConfigLoacation=classpath:application.xml
    • 设定url-pattern /*
    • 配置Annotation @Controller @Service @Auotwirted @RequestMapper
  2. 初始化阶段

    • 调用init方法 加载配置文件
    • IOC容器初始化 Map<String,Object>
    • 扫描相关的类 scan-package=‘你的包’
    • 创建实例并保存到容器 通过反射机制将类实例化放到IOC容器

    IOC


    • 进行DI操作 扫描IOC容器的实例,给没有复制的属性自动复制

    DI


    • 初始化HandMapping 将URL和一个Method一对一映射关联

    MVC


  3. 运行阶段

    • 调用doPost()方法/doGet()方法 Web容器调用doPost/doGet,获得request/response
    • 匹配HandMappingrequest对象中获得用户输入的url,找到其对应的Method
    • 反射调用method.invoker() 利用反射调用方法并返回结果
    • respone.getWrite().write 将结果输出到浏览器

说明

本文章为作者读书笔记及感悟,其中参考了《spring5核心原理与30个类手写实战》以及互联网上的内容。如有错误,请评论或者私聊我,欢迎探讨技术问题 。即将毕业,在准备找工作,有朋友想给我介绍的,欢迎添加微信:sllbiao。

源码学习之Spring (系统架构简单解析)的更多相关文章

  1. Java并发包源码学习系列:ReentrantReadWriteLock读写锁解析

    目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writ ...

  2. 框架源码系列六:Spring源码学习之Spring IOC源码学习

    Spring 源码学习过程: 一.搞明白IOC能做什么,是怎么做的  1. 搞明白IOC能做什么? IOC是用为用户创建.管理实例对象的.用户需要实例对象时只需要向IOC容器获取就行了,不用自己去创建 ...

  3. spring源码学习(三)--spring循环引用源码学习

    在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...

  4. 通过Redux源码学习基础概念一:简单例子入门

    最近公司有个项目使用react+redux来做前端部分的实现,正好有机会学习一下redux,也和小伙伴们分享一下学习的经验. 首先声明一下,这篇文章讲的是Redux的基本概念和实现,不包括react- ...

  5. (转) Spring源码阅读 之 Spring整体架构

    标签(空格分隔): Spring 声明:本文系转载,原地地址:spring framework 4 源码阅读 Spring骨架 Spring的骨架,也是Spring的核心包.主要包含三个内容 cont ...

  6. Android源码分析一 Android系统架构

    一 Android系统架构 Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动.音频驱动.照相机驱动 ...

  7. lua源码学习篇三:赋值表达式解析的流程

    上节说到表达式的解析问题,exprstate函数用于解析普通的赋值表达式.lua语言支持多变量赋值.本文先从单变量赋值表达式讲起. a = b = c = a + b 对于简单的两个数的求和过程,lu ...

  8. libevent源码学习(8):event_signal_map解析

    目录event_signal_map结构体向event_signal_map中添加event激活event_signal_map中的event删除event_signal_map中的event以下源码 ...

  9. 【spring源码学习】spring的task配置

    =================spring线程池的配置策略含义========================== id:当配置多个executor时,被@Async("id" ...

随机推荐

  1. CODING 祝大家中秋快乐!

  2. PS各种行业文件创建

    ps可以运用于:印刷.喷绘.网络等行业. 印刷 创建的印刷文件需要修改为毫米为单位,分辨率300以上,CMYK颜色格式: 16开的尺寸为:210*285mm:但在印刷之后,剪裁需要留出出血位,上下左右 ...

  3. nginx 校验及重启

    #查询nginx所在路径 [centos find 查询文件](https://www.cnblogs.com/codeWorldCodeHeart/p/12049262.html) #校验如下 /u ...

  4. subprocess 的 Popen用法

    使用Popen方法时,需要获取输出内容时可以按如下方法获取: # -*- coding:utf-8 -*- import subprocess cmd = r"ping www.baidu. ...

  5. java中使用lambda表达式

    使用lambda表达式能够使复杂的编写方式变的简单 lambda表达式的语法 (parameters) -> expression 或 (parameters) ->{ statement ...

  6. 关于tomcat对编码不正确的url参数报错的解决

    按照规范,url参数必须使用限定字符,其它字符需要进行编码,用像js的encodeurlcomponent函数. 在IE和360浏览器的兼容模式,不会自动对url的参数进行编码,会导致tomcat报错 ...

  7. json解决ajax跨域的原理

    jsonp只能解决GET类型的ajax请求跨域问题 jsonp请求不是ajax请求,而是一般的get请求 基本原理 浏览器端: 动态生成<script>来请求后台接口(src就是接口的ur ...

  8. Linux系统彻底卸载MySQL数据库

    一.首先查询系统是否安装了MySQL rpm -qa | grep -i mysql 输出结果表示,我安装的MySQL Server,Client都是5.6.44的,因为我系统支持的版本是要5.7+的 ...

  9. VS2019 .Net Core 3.0 Web 项目启用动态编译

    VS2019 中 .Net Core 3.0 项目默认没有启用动态编译, 这导致按F5调试的时候,修改了 HTML 代码,在浏览器上刷新没有效果. 启用动态编译方法如下: 1. 安装 Microsof ...

  10. python文件夹遍历,文件操作,获取文件修改创建时间

    在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回当前 ...