死磕Spring源码系列
一、Spring总体架构
1.架构图

2.SpringIOC:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
3.SpringAOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
4.SpringMVC:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
5.SpringJDBC:
6.SpringORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
7.Spring远端调用:
8.Spring事务管理:
9.Spring应用:最顶层应用,面向应用开发者。
10.Spring上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
二、SpringIOC容器
1.BeanFactory家族

1.1 BeanFactory
可访问spring容器的根接口,是bean容器的最基本的形态,这个接口是由包含许多bean定义的对象实现的,*每一个都由字符串名唯一标识。
根据bean的定义,*工厂将返回所包含对象的独立实例。
1.2 HierarchicalBeanFactory
可分级的BeanFactory,允许将父类设置为可配置的。
1.3 ApplicationContext
应用程序上下文,应用程序提供配置的核心接口。
1.4 WebApplicationContext
web应用程序提供配置的接口,getServletContext()方法获取全局应用程序共享对象(ServletContext上下文)。
1.5 ConfigurableWebApplicationContext
可配置的web应用程序上下文实现的接口,是WebApplicationContext接口的强化版
1.6 AbstractRefreshableWebApplicationContext
AbstractRefreshableWebApplicationContext抽象类中并没有太多的操作,更多的是一些get和set操作
1.7 XmlWebApplicationContext
web环境下spring容器的最高级形态。
2. IOC容器的初始化
2.1 Resource定位
2.1.1 DefaultListableBeanFactory的子类XmlBeanFactory,配置了特定的读取器XmlBeanDefinitionReader
2.1.2 AnnotationConfigWebApplicationContext在方法loadBeanDefinitions中配置了特定的读取器AnnotatedBeanDefinitionReader
2.2.3 FileSystemXmlApplicationContext类,getResourceByPath方法根据资源路径定位资源。
2.2.4 XmlWebApplicationContext类 通过构造方法定位资源。
2.2 BeanDefinition的载入
BeanDefinitionReader 定义了资源的获取和加载,其中XmlBeanDefinitionReader是他的子类。AbstractXmlApplicationContext类的定义了loadBeanDefinitions方法,
通过XmlBeanDefinitionReader完成BeanDefinition的载入。具体的Spring的BeanDefinition的解析是在BeanDefinitionParserDelegate中完成的。解析完成后会把解析结果
放到BeanDefinition对象中并设置到BeanDefinitionHolder。
2.3 向IOC容器注册BeanDefinition
类DefaultListableBeanFactory实现BeanDefinitionRegistry接口完成BeanDefinition向容器的注册,简单的讲就是将之前解析到的BeanDefinition设置到hashMap中去。
三、SpringAOP
死磕Spring源码系列的更多相关文章
- 死磕Spring源码之AliasRegistry
死磕Spring源码之AliasRegistry 父子关系 graph TD; AliasRegistry-->BeanDefinitionRegistry; 代码实现 作为bean定义的最顶层 ...
- 事件机制-Spring 源码系列(4)
事件机制-Spring 源码系列(4) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostProcess ...
- Ioc容器依赖注入-Spring 源码系列(2)
Ioc容器依赖注入-Spring 源码系列(2) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostPr ...
- Ioc容器BeanPostProcessor-Spring 源码系列(3)
Ioc容器BeanPostProcessor-Spring 源码系列(3) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Io ...
- AOP执行增强-Spring 源码系列(5)
AOP增强实现-Spring 源码系列(5) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostProc ...
- Ioc容器beanDefinition-Spring 源码系列(1)
Ioc容器beanDefinition-Spring 源码系列(1) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器 ...
- Spring源码系列 — 注解原理
前言 前文中主要介绍了Spring中处理BeanDefinition的扩展点,其中着重介绍BeanDefinitionParser方式的扩展.本篇文章承接该内容,详解Spring中如何利用BeanDe ...
- Spring源码系列 — BeanDefinition扩展点
前言 前文介绍了Spring Bean的生命周期,也算是XML IOC系列的完结.但是Spring的博大精深,还有很多盲点需要摸索.整合前面的系列文章,从Resource到BeanDefinition ...
- Spring源码系列 — Bean生命周期
前言 上篇文章中介绍了Spring容器的扩展点,这个是在Bean的创建过程之前执行的逻辑.承接扩展点之后,就是Spring容器的另一个核心:Bean的生命周期过程.这个生命周期过程大致经历了一下的几个 ...
随机推荐
- C的基本数据类型小结
代码 /** * 基本数据类型 */ #include <stdio.h> #include <limits.h> /* 定义 32 位时的 long 与 unsigned l ...
- new做了些什么?
new做了些什么? function People(name, age){ this.name = name; this.age = age; }; var xiaoming = new People ...
- 如何优雅地在React中处理事件响应&&React绑定onClick为什么要用箭头函数?
React绑定onClick为什么要用箭头函数? https://segmentfault.com/q/1010000010918131 如何优雅地在React中处理事件响应 https://segm ...
- ThinkPhp学习
页面跳转 界面跳转是很常用的操作,所以基于ubuntu16系统,这周学习了ThinkPHP页面跳转和重定向. 页面跳转 系统的Think\Controller类内置了两个页面跳转方法err ...
- python socket的长连接和短连接
前言 socket中意为插座,属于进程间通信的一种方式.socket库隐藏了底层,让我们更好的专注于逻辑.如果短连接和长连接两概率没搞明白,会被坑的爬不起来. 短连接 一次完整的传输过程,发送方输出流 ...
- jquery 选项卡切换 带背景图片
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- vue.config.js配置前端代理
// vue.config.js 配置说明 //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions // 这 ...
- 手写实现indexOf
突然奇想.自己手写一个indexOf package com.toov5.test; public class Test8 { public static int find(String str1, ...
- jsp详解(3个指令、6个动作、9个内置对象、11个隐式对象)
jsp概述SP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP实际上就是Servlet. jsp=html+jav ...
- vue.js axios使用
1. 自定义配置 /** * Created by superman on 17/2/16. * http配置 */ import axios from 'axios' import utils fr ...