源码学习之Spring (系统架构简单解析)
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的思路
配置阶段
- 配置Web.xml DisppatcherServler
- 设定init-param contextConfigLoacation=classpath:application.xml
- 设定url-pattern /*
- 配置Annotation @Controller @Service @Auotwirted @RequestMapper
初始化阶段
- 调用init方法 加载配置文件
- IOC容器初始化
Map<String,Object> - 扫描相关的类 scan-package=‘你的包’
- 创建实例并保存到容器 通过反射机制将类实例化放到IOC容器
IOC
- 进行DI操作 扫描IOC容器的实例,给没有复制的属性自动复制
DI
- 初始化HandMapping 将URL和一个Method一对一映射关联
MVC
运行阶段
- 调用
doPost()方法/doGet()方法 Web容器调用doPost/doGet,获得request/response - 匹配
HandMapping从request对象中获得用户输入的url,找到其对应的Method - 反射调用
method.invoker()利用反射调用方法并返回结果 respone.getWrite().write将结果输出到浏览器
- 调用
说明
本文章为作者读书笔记及感悟,其中参考了《spring5核心原理与30个类手写实战》以及互联网上的内容。如有错误,请评论或者私聊我,欢迎探讨技术问题 。即将毕业,在准备找工作,有朋友想给我介绍的,欢迎添加微信:sllbiao。
源码学习之Spring (系统架构简单解析)的更多相关文章
- Java并发包源码学习系列:ReentrantReadWriteLock读写锁解析
目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writ ...
- 框架源码系列六:Spring源码学习之Spring IOC源码学习
Spring 源码学习过程: 一.搞明白IOC能做什么,是怎么做的 1. 搞明白IOC能做什么? IOC是用为用户创建.管理实例对象的.用户需要实例对象时只需要向IOC容器获取就行了,不用自己去创建 ...
- spring源码学习(三)--spring循环引用源码学习
在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...
- 通过Redux源码学习基础概念一:简单例子入门
最近公司有个项目使用react+redux来做前端部分的实现,正好有机会学习一下redux,也和小伙伴们分享一下学习的经验. 首先声明一下,这篇文章讲的是Redux的基本概念和实现,不包括react- ...
- (转) Spring源码阅读 之 Spring整体架构
标签(空格分隔): Spring 声明:本文系转载,原地地址:spring framework 4 源码阅读 Spring骨架 Spring的骨架,也是Spring的核心包.主要包含三个内容 cont ...
- Android源码分析一 Android系统架构
一 Android系统架构 Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动.音频驱动.照相机驱动 ...
- lua源码学习篇三:赋值表达式解析的流程
上节说到表达式的解析问题,exprstate函数用于解析普通的赋值表达式.lua语言支持多变量赋值.本文先从单变量赋值表达式讲起. a = b = c = a + b 对于简单的两个数的求和过程,lu ...
- libevent源码学习(8):event_signal_map解析
目录event_signal_map结构体向event_signal_map中添加event激活event_signal_map中的event删除event_signal_map中的event以下源码 ...
- 【spring源码学习】spring的task配置
=================spring线程池的配置策略含义========================== id:当配置多个executor时,被@Async("id" ...
随机推荐
- spring+cxf No bean named 'cxf' available
最近项目中需要用到webservice,在spring中集成cxf时一直报错: 严重: StandardWrapper.Throwable org.springframework.beans.fact ...
- C++ 进阶笔记之一
优化相关 使用灵活的.动态分配的数据,不要使用固定大小多数组: 优先使用线性算法或者尽可能快的算法: push_back 散列表查询:O(1) set/map lower_bound/upper_bo ...
- 《软件安装》VMware 安装 centos8
上期问题回顾 搞技术的同学应该都听过docker,那么请问docker和虚拟机有什么区别呢? 传统的虚拟机架构是:物理机 -> 宿主机操作系统 -> Hypervisor支持 -> ...
- nginx 反向代理之 proxy_pass
格式很简单: proxy_pass URL; 其中URL包含:传输协议(http://, https://等).主机名(域名或者IP:PORT).uri. 示例如下: proxy_pass http: ...
- [译]Vulkan教程(27)Image
[译]Vulkan教程(27)Image Images Introduction 入门 The geometry has been colored using per-vertex colors so ...
- 【RTOS】基于V7开发板的最新版RTX4 V4.81.1程序模板,不使用CMSIS-RTOS封装层,继续保持超强战斗力
模板下载: 链接:https://pan.baidu.com/s/1idoQYcR3SOzVC3KTFcMGMA 提取码:i8k5 1.MDK使用MDK5.26及其以上版本. 2.进入到MDK5后 ...
- Tomcat9+JDK 13报错Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program
Tomcat使用的是https://tomcat.apache.org/download-90.cgi Tomcat9 之前安装的JDK 13,有JAVA_HOME环境变量地址(C:\Program ...
- jQuery 源码分析(二十一) DOM操作模块 删除元素 详解
本节说一下DOM操作模块里的删除元素模块,该模块用于删除DOM里的某个节点,也可以理解为将该节点从DOM树中卸载掉,如果该节点有绑定事件,我们可以选择保留或删除这些事件,删除元素的接口有如下三个: e ...
- Linux CentOS上安装 MySQL 8.0.16
前言: 因为我需要在我新安装的Linux CentOS系统服务器中安装和配置MySQL服务器,然而对于我们这种Linux使用小白而言在Linux系统中下载,解压,配置MySQL等一系列的操作还是有些耗 ...
- llinux/重启/用户切换/注销
一.指令 shutdown命令 shutdown -h now //立即关机 shutdown -h 2 //分钟后关机 shutdown -r now //立即重启 shutdown -r 1 // ...