一、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源码系列的更多相关文章

  1. 死磕Spring源码之AliasRegistry

    死磕Spring源码之AliasRegistry 父子关系 graph TD; AliasRegistry-->BeanDefinitionRegistry; 代码实现 作为bean定义的最顶层 ...

  2. 事件机制-Spring 源码系列(4)

    事件机制-Spring 源码系列(4) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostProcess ...

  3. Ioc容器依赖注入-Spring 源码系列(2)

    Ioc容器依赖注入-Spring 源码系列(2) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostPr ...

  4. Ioc容器BeanPostProcessor-Spring 源码系列(3)

    Ioc容器BeanPostProcessor-Spring 源码系列(3) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Io ...

  5. AOP执行增强-Spring 源码系列(5)

    AOP增强实现-Spring 源码系列(5) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostProc ...

  6. Ioc容器beanDefinition-Spring 源码系列(1)

    Ioc容器beanDefinition-Spring 源码系列(1) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器 ...

  7. Spring源码系列 — 注解原理

    前言 前文中主要介绍了Spring中处理BeanDefinition的扩展点,其中着重介绍BeanDefinitionParser方式的扩展.本篇文章承接该内容,详解Spring中如何利用BeanDe ...

  8. Spring源码系列 — BeanDefinition扩展点

    前言 前文介绍了Spring Bean的生命周期,也算是XML IOC系列的完结.但是Spring的博大精深,还有很多盲点需要摸索.整合前面的系列文章,从Resource到BeanDefinition ...

  9. Spring源码系列 — Bean生命周期

    前言 上篇文章中介绍了Spring容器的扩展点,这个是在Bean的创建过程之前执行的逻辑.承接扩展点之后,就是Spring容器的另一个核心:Bean的生命周期过程.这个生命周期过程大致经历了一下的几个 ...

随机推荐

  1. 【记录】linux 命令拷贝文件到远程服务器,linux下载文件到本地

    Linux scp命令用于Linux之间复制文件和目录 -1 强制scp命令使用协议ssh1 -2 强制scp命令使用协议ssh2 -4 强制scp命令只使用IPv4寻址 -6 强制scp命令只使用I ...

  2. 一、bootstrap-datepicker

    一.bootstrap-datepicker <!DOCTYPE html> <html> <head> <title></title> & ...

  3. mybatis generator 使用方法

    环境: ubuntu   eclipse maven 一. 简介 mybatis-geneator是一款mybatis自动代码生成工具,可以通过配置,快速生成mapper和xml文件以及pojo 二. ...

  4. Nginx是什么?为什么选择Nginx做服务器软件?有什么优势?

    代理服务器基础知识 Nginx是什么? 为什么选择Nginx 1.代理服务器基础知识 a.代理服务器 一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端.应用 ...

  5. php 字符转成数字

    1.第一种转换方式:在要转换的变量之前加上用括号括起来的目标类型,如 (int):(bool):(float):(string):(array):(object) 2.第二种转换方式:使用3个具体类型 ...

  6. shell快速入门

    $? 表示上一个命令退出的状态,0表示执行正常,不等于0表示执行不正常. $$ 表示当前进程编号 $ 表示当前脚本名称 $# 表示参数的个数,常用于循环 $*和$@ 都表示参数列表 $n 表示n位置的 ...

  7. centos7.5部署ELk

    第1章 环境规划 1.1 ELK介绍       ELK是ElasticSerach.Logstash.Kibana三款产品名称的首字母集合,用于日志的搜集和搜索.      Elasticsearc ...

  8. Python基础教程(012)--排查手误错误

    前言 排查由于手误书写错误的方法 内容 手动输入错误的时候,颜色是红色 函数名称写错 1,颜色不一样 2,nameError错误 掌握知识点 学会在写代码的时候排查错误

  9. hdu 5279 YJC plays Minecraft——生成函数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5279 令 n 个点的树的 EGF 是 g(x) ,则 \( g(x) = \sum\limits_{i=0 ...

  10. 通过create-react-app从零搭建react环境

    一. 快速开始: 全局安装脚手架: $ npm install -g create-react-app 通过脚手架搭建项目: $ create-react-app <项目名称> 开始项目: ...