Spring源码 01 概述
参考源
https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click
https://www.bilibili.com/video/BV12Z4y197MU?spm_id_from=333.999.0.0
《Spring源码深度解析(第2版)》
版本
本文章基于 Spring 5.3.15
简介
Spring 是开源的轻量级 J2EE 框架
我们常说的 Spring 实际上是指 Spring Framework,它是 Spring 家族中的一个重要分支。

官方文档
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html
两大核心:IOC 和 AOP
IOC
Inversion of Control,控制反转,把创建对象的过程交给 Spring 进行管理。
具体实现方式
DI(Dependency Injection),依赖注入。
底层实现
工厂模式 + XML 解析 + 反射
AOP
Aspect Oriented Programming,面向切面编程,不修改源代码进行功能增强。
底层实现
动态代理 => 代理模式 => 反射
结构

组件
Spring 中的组件分别提供一块特定的功能。
core

spring-core
核心组件,依赖注入的最基本实现。
spring-beans
Bean 工厂与 Bean 的装配,提供控制反转的基础实现。
spring-context
上下文即 IOC 容器,在 IOC 基础上继续扩展服务。
spring-expression
对表达式语言的支持。
commons-logging
因为 spring-core 依赖了 commons-logging,而其他模块都依赖了 spring-core。
所以整个 Spring 框架都依赖了 commons-logging。
如果有自己的日志实现如 log4j,可以排除对 commons-logging 的依赖,没有日志实现而排除了 commons-logging 依赖,会编译报错。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.17.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
aop

spring-aop
提供面向切面编程的实现。
spring-aspects
提供对 AspectJ 框架的整合。
spring-instrument
提供一些类级的工具支持和 ClassLoader 级的实现,用于服务器。
spring-instrument-tomcat
针对 Tomcat 的 instrument 实现。
data access

spring-jdbc
JDBC 的支持。
spring-tx
事务控制。
spring-orm
对象关系映射,集成 ORM 框架。
spring-oxm
对象 XML 映射。
spring-jms
Java 消息服务。
web

spring-web
基础 web 功能,如文件上传。
spring-webmvc
MVC 实现。
spring-webmvc-portlet
基于 portlet 的 MVC 实现。
spring-websocket
对 WebSocket 的支持,为 WEB 应用提供的高效通信工具。
test

spring-test
测试,提供 jUnit 与 mock 测试功能。
spring-context-support
对 spring-context 的扩展。
Spring 额外支持包,比如邮件服务、视图解析等。
其他

spring-messaging
对消息服务的支持,例如搭配 JMS、搭配 AMQP、搭配 WebSocket 等,用于构建基于消息的应用程序。
Spring源码 01 概述的更多相关文章
- Spring源码阅读笔记01:源码阅读环境准备
1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活 ...
- Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码
目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ...
- spring源码分析之spring-core总结篇
1.spring-core概览 spring-core是spring框架的基石,它为spring框架提供了基础的支持. spring-core从源码上看,分为6个package,分别是asm,cgli ...
- spring源码分析(二)Aop
创建日期:2016.08.19 修改日期:2016.08.20-2016.08.21 交流QQ:992591601 参考资料:<spring源码深度解析>.<spring技术内幕&g ...
- [spring源码] 小白级别的源码解析(一)
一直都在用spring,但是每次一遇到spring深入的问题,就是比较懵的状态.最近花了段时间学习了一下spring源码. 1,spring版本介绍 虽然工作中,一直在用到spring,可能有时候,并 ...
- 【目录】Spring 源码学习
[目录]Spring 源码学习 jwfy 关注 2018.01.31 19:57* 字数 896 阅读 152评论 0喜欢 9 用来记录自己学习spring源码的一些心得和体会以及相关功能的实现原理, ...
- 转 Spring源码剖析——核心IOC容器原理
Spring源码剖析——核心IOC容器原理 2016年08月05日 15:06:16 阅读数:8312 标签: spring源码ioc编程bean 更多 个人分类: Java https://blog ...
- spring源码深度解析—Spring的整体架构和环境搭建
概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Java 开发框 ...
- spring 源码解析
1. [文件] spring源码.txt ~ 15B 下载(167) ? 1 springн┤┬вио╬Ш: 2. [文件] spring源码分析之AOP.txt ~ 15KB 下载( ...
随机推荐
- 第06组Alpha冲刺总结
目录 1. 基本情况 2. 思考与总结 2.1. 设想和目标 2. 计划 3. 资源 4. 变更管理 5. 设计/实现 6. 测试/发布 7. 团队的角色,管理,合作 8. 总结 3. 敏捷开发 1. ...
- consul系列文章02---替换掉.netcore的配置文件
如果是开发微服务的项目,多个服务的配置管理起来比较麻烦,需要集中管理,也就是需要有配置中心: consul集成配置中心的思路:读取配置文件时不在从本地的应用中读取,而是从consul的KEY/valu ...
- Crane-scheduler:基于真实负载进行调度
作者 邱天,腾讯云高级工程师,负责腾讯云 TKE 动态调度器与重调度器产品. 背景 原生 kubernetes 调度器只能基于资源的 resource request 进行调度,然而 Pod 的真实资 ...
- 【SpringSecurity系列1】基于SpringSecurity实现前后端分离无状态Rest API的权限控制
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...
- Jmeter跨线程组获取token(彻底解决因格式token报错)
将token设置为全局变量网上方式方法千千万,但是你就是获取token会失败,不是提示格式错误,就是提示无法获取token,没安装Jmeter的可以查看前两期教程,有详细介绍 在工作当中如果仅仅是一个 ...
- python 的 @staticmethod和@classmethod和普通实例方法
参考:https://www.huaweicloud.com/articles/12607084.html https://blog.csdn.net/qq_30708445/article/deta ...
- Jetpack架构组件学习(3)——Activity Results API使用
原文地址:Jetpack架构组件学习(3)--Activity Results API使用 - Stars-One的杂货小窝 技术与时俱进,页面跳转传值一直使用的是startActivityForRe ...
- 将 Ubuntu 16.04 LTS 的 Unity 启动器移动到桌面底部命令
将 Ubuntu 16.04 LTS 的 Unity 启动器移动到桌面底部命令: gsettings set com.canonical.Unity.Launcher launcher-positio ...
- 跟着 Guava、Spring 学习如何设计观察者模式
文章首发在公众号(龙台的技术笔记),之后同步到掘金和个人网站:xiaomage.info 今天讲解一篇行为型设计模式,什么是行为型?行为型主要负责设计 类或对象之间的交互.工作中常用的观察者模式就是一 ...
- 第1期 考研中有关函数的一些基本性质《zobol考研微积分学习笔记》
在入门考研微积分中,我们先复习一部分中学学的初等数学的内容.函数是非常有用的数学工具. 1.函数的性质理解: 首先考研数学中的所有函数都是初等函数.而函数的三个关键就是定义域.值域.对应关系f. 其中 ...