1、Spring理念剖析

Spring总共有十几个组件,但真正核心的只有三个:Core、Context和Bean。我们将从这三个组件入手来分析Spring。

Spring之中最重要的当属Bean了,Spring实际上就是面向Bean的编程,Bean对于Spring的意义就好比Object对于OOP的意义一样。那么,三个核心组件之间是如何协同工作的呢?如果把Bean比作一场演出中的演员,那么Context就是这场演出的舞台,Core就是演出的道具,至于演出的节目,就是Spring的一系列特色功能了。

我们知道Bean包裹的是Object,而Object中必然有数据,Context就是给这些数据提供生存环境,发现每个Bean之间的关系,为他们建立并维护好这种关系。这样来说,Context就是一个Bean关系的集合,这个关系集合就是我们所说的IOC容器。那么Core又有什么作用呢?Core就是发现、建立和维护每个Bean之间的关系所需的一系列工具,就是我们经常说的Util。

下面我们来看看三个核心组件的详细结构。

2、组件结构详解

Bean组件在Spring的org.springframework.beans包下,主要完成了Bean的创建、Bean的定义以及Bean的解析三件事。

SpringBean的创建时典型的工厂模式,其工厂的继承层次关系如图所示,BeanFactory为顶级接口。

BeanFactory的最终默认实现类是DefaultListableBeanFactory,他实现了所有的接口。为什么要定义怎么多层次的接口呢?实际上,里面的每个接口都有他使用的场合,它主要是为了区分在Spring内部对象的传递和转化过程中,对对象的数据访问所做的限制。这些接口共同定义了Bean的集合、Bean之间的关系和Bean的行为。

Bean的定义主要由BeanDefinition描述,其完整的描述了在Spring配置文件中定义的<bean/>节点的所有信息,包括子节点。当一个<bean/>节点被成功解析之后,在Spring内部它会被转化成一个BeanDefinition对象,接下来的所有操作都是对这个对象进行的。

Bean的解析主要是对Spring配置文件的解析,这个过程非常复杂,下图是Bean的解析类。

Context组件:

前面说到,Context组件的作用是给Spring提供一个运行时的环境,用以保存各个对象的状态,我们来看一下与Context相关的类结构图。

从图中可以看出,Context类结构的顶级父类是ApplicationContext,它除了能标识一个应用环境的基本信息以外,还继承了5个接口,这5个接口主要是扩展了Context的功能。ApplicationContext的子类主要包含两个方向,图中已作说明。再往下就是构建Context的文件类型,接着就是访问Context的方式。

Core组件:

Core组件一个重要的组成部分就是定义了资源的访问方式。Core组价把所有的资源都抽象成一个接口,这样,对于资源使用者来说,不需要考虑文件的类型。对资源提供者来说,也不需要考虑如何将资源包装起来交给别人使用(Core组件内所有的资源都可以通过InputStream类来获取)。另外,Core组件内资源的加载都是由ResourceLoader接口完成的,只要实现这个接口就可以加载所有的资源。

那么,Context和Resource是如何建立关系的呢?通过前面Context的介绍我们知道,Context组件里面的类或者接口最终都实现了ResourcePatternResolver接口,ResourcePatternResolver接口的作用就是加载、解析和描述资源。这个接口相当于Resource里面的一个接头人,它把Resource里的资源加载、解析和定义整合到一起,便于其他组件使用。

Spring核心组件分析相关推荐

  1. MyBatis整合Spring原理分析

    目录 MyBatis整合Spring原理分析 MapperScan的秘密 简单总结 假如不结合Spring框架,我们使用MyBatis时的一个典型使用方式如下: public class UserDa ...

  2. MyBatis(五)MyBatis整合Spring原理分析

    前面梳理了下MyBatis在单独使用时的工作流程和关键源码,现在看看MyBatis在和Spring整合的时候是怎么工作的 也先从使用开始 Spring整合MyBatis 1.引入依赖,除了MyBati ...

  3. 需求分析:每个产品经理都应掌握的需求核心组件分析

    需求分析可以说是每个从事需求分析工作的人,不管其级别是初中高级亦或是产品总监工作中的重中之重.把需求进行分析进而分解成核心组件是一种必须掌握的强分析技术,每个产品经理应该形成这种意识,甚至是遇到需求后 ...

  4. Spring核心组件的理解

    Spring框架的核心组件:Core.Context.Beans.其中最核心的组件就是Beans,最核心的功能就是BeanFactory. 文章目录 spring框架核心组件 spring框架核心组件 ...

  5. spring 处理带有特殊字符的请求_程序员笔记|常见的Spring异常分析及处理

    [技术沙龙002期]数据中台:宜信敏捷数据中台建设实践|宜信技术沙龙 将于5月23日晚8点线上直播,点击报名 一.前言 相信我们每个人在SpringMVC开发中,都遇到这样的问题:当我们的代码正常运行 ...

  6. spring思想分析

    摘要: EveryBody in the world should learn how to program a computer...because it teaches you how to th ...

  7. Spring源代码分析(11)---JDBC Dao(老树发新芽)

    在数据库访问技术中,我们有很多选择,诸如jpa,hibernate但是无论选择那种,其实,我们都无法拒绝使用JDBC,Spring为集成JDBC做个很多工作,让我们来看下,这最底层数据库访问技术在春天 ...

  8. Spring核心组件详解(Bean、Context、Core)

    上篇文章介绍了Spring的有三个核心组件,它们为什么是Spring的核心组件,它们之间啥关系,都代表了啥角色. 下面将详细介绍每个组件内部类的层次关系,以及它们在运行时的时序顺序.我们在使用 Spr ...

  9. Spring - 手把手分析 IoC 容器创建过程

    概述 这里我们以 Spring 5.2.8.RELEASE 版本为例,看一下 IoC 容器 的创建过程.同时我们使用 java-based 的方式实例化 IoC 容器,即使用 AnnotationCo ...

  10. spring定时器分析

    spring定时器如何使用? 步骤1. 定义job bean 1.TaskScheduler构造 2.初始化相关服务 <bean id="xxxxScheduler" cla ...

最新文章

  1. 【青少年编程】【答疑】控制Scratch异步代码的执行顺序
  2. 企业靠这些 云端数据就能得到企业级的安全守护
  3. 如何做会员排名 按照投稿文章数量
  4. java用流体加减乘除_任意输入两个数,完成加法、减法、乘法、除法运算!(加减乘除运算分别定义四个方法)_学小易找答案...
  5. session过期跳转登录页面
  6. HashMap 详解
  7. linux硬件抽象层框图,理解和使用Linux的硬件抽象层HAL.docx
  8. java 通用方法_java – 类型的通用方法
  9. windows下启动activemq闪退
  10. 导师带学生卡Bug,这波操作~
  11. 给matlab图加图注,matlab学习5-数据可视化4-gai.ppt
  12. java写入文件不覆盖写入_Java写入文件–用Java写入文件的4种方法
  13. 苹果6代掉水里怎么办 iPhone6掉水处理方法
  14. 【数据库】MySQL单表查询
  15. 爬虫基础以及Xpath、Beautiful Soup的应用
  16. 无法打开此修补程序包,请确认该修补程序包存在并且可以访问它以检查这个修补程序包是有效的
  17. 教程篇(7.0) 01. FortiGate安全 简介及初始配置 ❀ Fortinet 网络安全专家 NSE 4
  18. python好学吗-非科班出身自学Python好学吗?
  19. Floyd AcWing 854. Floyd求最短路
  20. 理解redux-thunk

热门文章

  1. Unity Shader·科技感描边效果(利用Robert算子边缘检测)
  2. 【lssvm分类】基于粒子群算法优化最小二乘支持向量机lssvm实现数据分类matlab代码
  3. ZUC密码算法 - Python实现
  4. Java-String类学习笔记
  5. 【参考】MTK线刷工具错误代码大全及解决方法
  6. c语言 文学研究助手 源程序,数据结构文学研究助手
  7. WEBMAX官方帮助手册 惊艳登场
  8. Radius 协议介绍
  9. 用matlab画指定点与点之间的连线
  10. iframe背景透明的设置方法