死磕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的生命周期过程.这个生命周期过程大致经历了一下的几个 ...
 
随机推荐
- Nhibernet Get方法获取数据后,修改字段,未保存,但是数据库的数据却同步了
			
首先,对象是在session中取得的,所以这个对象已经和数据库同步了,或者说相关联了如果你的session中的对象发生变法,提交事务后,数据库中的数据也会更新未保存更改,不要以为session就不会在 ...
 - eclipse导入了jar查看不了源码解决方法
			
当导入源码的时候ctrl+左键的时候,还是查看不了源码.问题一直困扰我很久,百度了很多方法.现在分享下解决的方法. 经过简单整理,如下: 第一步:下载JAD . jad官方地址的官方下载地址是: ht ...
 - unittest接口自动化测试报告
			
unittest接口自动化测试报告 展示: 代码: __author__ = "Wai Yip Tung, Findyou" __version__ = "0.8.2.1 ...
 - cpanle/Apache 强制http跳转到https
			
因为租的虚拟主机是使用Cpanel,按照网上找的文章,处理的步骤如下: 打开Cpanel面板-文件管理器-设置(在页面的右上角)-勾选显示隐藏文件(dotfiles)-save . 找到网站所在的目录 ...
 - 【Shell】ps -ef 和ps aux
			
两者没太大差别 追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同.现 ...
 - UVa 11384 (推公式+递归)
			
题目: 给你1到n,现在让你将每个数变成0,每一步操作可以选取任意数一起减去一个整数,减完了不能为负数!问你最少需要几步? 巨水的题,然而为什么要写博客呢?提醒自己要记得递归函数,不要傻傻的开数组硬比 ...
 - 在Delphi中使用系统对应文件类型的图标
			
在应用程序的编写中,组合框(ComboBox).列表框(ListBox).等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标.在一般的Windows应用程序中,这些图标的显示都要随列 ...
 - SQL Server数据库备份&还原
			
一.备份 1.登录数据库 2.找到要还原的数据库 右键-任务-备份-添加(路径只写一个,刚开始二个总是报错)-确定 二.还原数据库 这个之间报错了二次 1.报错1:备份集中的数据库与现有数据库“XXX ...
 - mysql5.6配置-my
			
# mkdir -p /home/mysql/3306/{data,binlog,logs} [client] port = socket=/tmp/my3306.sock [mysql] no-au ...
 - 在angular项目中使用bootstrap的tooltip插件时,报错Property 'tooltip' does no t exist on type 'JQuery<HTMLElement>的解决方法和过程
			
在angular4的项目中需要使用bootstrap的tooltip插件. 1. 使用命令安装jQuery和bootstrap npm install bootstrap jquery --save ...