简介

Spring框架如今已成为服务端开发框架中的主流框架之一,是web开发者的利器。然而,真正让人着迷的,还是与其实现相关的 原理,设计模式以及许多工程化的思想。本文主要探讨Spring的三大核心组件

Spring的核心组件有很多,但真正构成其骨骼的,是Core,Context和Bean

Bean

三者之中,Bean是核心中的核心。Bean实现了将对象通过配置文件的方式,由Spring来管理对象存储空间,生命周期的分配。通过依赖注入的方式,可以实现将对象注入到指定的业务逻辑类中。这些注入关系,由Ioc容器来管理。

因此,Spring的核心思想常常被称作BOP(Bean Oriented Programming),面向Bean编程。

Bean组件定义在Spring的org.springframework.beans包下,解决了以下几个问题:

  1. Bean的定义
  2. Bean的创建
  3. Bean的解析

使用者只需要关注Bean的创建,其他两个过程由Spring内部完成。

1.整体架构

Spring Bean的整体架构是典型的工厂模式,最上层的接口是BeanFactory。ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBean是其子类,目的是为了区分Spring内部对象处理和转化的数据限制

  • ListableBeanFactory: 表示这些Bean是可列表的
  • HierarchicalBeanFactory: 表示这些Bean有继承关系
  • AutowireCapableBeanFactory: 定义Bean的自动装配规则

这几个接口分别定义了Bean的集合、Bean的关系和Bean的行为。

2.Bean定义

Bean的定义主要由BeanDefinition描述,层次关系如下:

Spring的配置文件中定义的节点,成功解析后都会被转化为BeanDefinition对象,之后所有的操作都会在BeanDefinition对象之上进行。

3.Bean解析

Bean解析的主要任务是:对Spring的配置文件进行解析,最后生成BeanDefinition对象。
解析过程非常复杂,包括配置文件里所有的tag。主要参与的类如下:

Context

Bean包装的是一个个Object,Object中存储着业务所需的数据。所以,如何给这些数据及之间的关系提供生存、运行环境(即保存对象的状态),就是Context要解决的问题。Context实际上就是Bean关系的集合,又称之为Ioc容器

ApplicationContext是Context最上层的接口,层次关系如下:

ApplicationContext能够标识一个应用环境的基本信息。其上继承了5个接口,用于拓展Context的功能,其中BeanFactory用于创建Bean,同时继承了ResourceLoader接口,用于访问任何外部资源。

ApplicationContext的子类,主要包括:

  1. ConfigurableApplicationContext: 用户可动态配置修改信息的Context,其下AbstractRefreshableApplicationContext最为常用。
  2. WebApplicationContext:
    为Web应用准备的Context,可以直接访问ServletContext。

总之,ApplicationContext必须完成的功能如下:

  • 标识一个应用环境
  • 利用BeanFactory创建Bean对象
  • 保存对象关系表
  • 捕获各种事件

作为Ioc容器,Context是Spring其他大部分功能的基础

Core

Spring 发现、建立和维护Bean之间关系的一揽子工具,称之为Core。实际上就是所需的Util。

Core的重要组成部分之一是Resource

1. Resource整体层次

Resource主要定义了资源的访问方式,所有资源都抽象到了Resource接口中,层次关系如下:

  • 资源包装。Resource向上继承了InputStreamSource接口,所有的资源都通过InputStream来获取,从而屏蔽了资源提供者。
  • 资源加载。Resource下的ResourceLoader接口,所有资源加载者统一实现该接口就能加载所有的资源,例如之前的ApplicationContext。

2. 与Context建立关系

如图,ApplicationContext通过ResourcePatternResolver接口与ResourceLoader进行交互,来进行资源的加载、解析和描述。ResourcePatternResolver将资源封装整合,便于其他组件使用。

总结


本文主要总结了构成Spring骨骼框架的三大核心组件及其之间的联系,以及对三者实现原理理解的一些心得体会。


作者: I'm coding

链接ACFLOOD

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如果您觉得本文对您有所帮助,就给俺点个赞吧!

参考书籍:《深入分析Java Web技术内幕》(许令波)

图片来源:《深入分析Java Web技术内幕》(许令波)

Spring核心组件剖析的更多相关文章

  1. Spring 核心组件总结

    spring核心组件总结 spring介绍 spring概念 IOC: Inverse Of Control 控制反转 ​ 将我们创建对象的方式反转了,以前创建对象是由我们开发人员自己维护,包括依赖注 ...

  2. Spring 核心组件工作原理简析

    Spring Framework 的核心组件有三个: Spring Core,Spring Context 和 Spring Beans,它们奠定了 Spring 的基础并撑起了 Spring 的框架 ...

  3. spring核心组件

    spring的对象是bean组件,就像面向对象的object,bean包装的是object.context的作用,发现每个bean之间的关系,为他们之间建立好这种关系并进行维护.所以,可以把conte ...

  4. Spring核心组件知识梳理

    Spring的一些概念和思想 Spring的核心:AOP.IOC. 简单点说,就是把对象交给Spring进行管理,通过面向切面编程来实现一些"模板式"的操作,使得程序员解放出来,可 ...

  5. Spring IOC 剖析

    模拟实现 Spring Ioc 控制反转功能 使用 => 原理 => 源码 => 模拟实现 使用:了解 原理:熟悉 源码 And 模拟实现: 精通 对照 Spring 功能点 Spr ...

  6. 转 Spring源码剖析——核心IOC容器原理

    Spring源码剖析——核心IOC容器原理 2016年08月05日 15:06:16 阅读数:8312 标签: spring源码ioc编程bean 更多 个人分类: Java https://blog ...

  7. spring的核心组件及作用(一)

    Spring的核心组件有: Context     Core     Bean. 如果要在这三个核心组件上挑出一个最核心的组件,那就是Bean组件了. Spring的特性功能有:WEB ORM AOP ...

  8. Jquery UI 组合树 - ComboTree 集成Wabacus4.1 代码剖析

    Jquery UI 1.3 (组合树 - ComboTree ) 集成Wabacus4.1 集成Spring 代码剖析 使用时,请下载需要Jquery ui包进行配置 combotree.js 的代码 ...

  9. Spring初学

    一.spring体系结构spring核心组件 1.Beans(包装应用程序自定义对象Object,Object中存有数据) 2.Core (资源加载,资源抽象,建立维护与bean之间的一些关系所需的一 ...

随机推荐

  1. Docker容器学习梳理 - SSH方式登陆容器

    前面几篇已经介绍了Docker基础环境的部署,下面介绍下通过ssh方式登陆Docker容器的操作记录(其实不太建议直接用ssh去连接上容器的想法,虽然可以,但是有很多弊端,而且docker已经提供了容 ...

  2. [2017BUAA软工]第零次博客作业

    第一部分:结缘计算机 1. 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 当年高考前在专业这件事上纠结了好久,因为我对于大学各个专业具体学什么都不甚了解,于是就迟迟没有明确的目 ...

  3. shell脚本--逻辑判断与字符串比较

    涉及到比较和判断的时候,要注意 整数比较使用-lt,-gt,ge等比较运算符,详情参考:整数比较 文件测试使用 -d, -f, -x等运算发,详情参考:文件测试 逻辑判断使用    && ...

  4. PAT 1016 部分A+B

    https://pintia.cn/problem-sets/994805260223102976/problems/994805306310115328 正整数A的“D~A~(为1位整数)部分”定义 ...

  5. ECSHOP后台登陆后一段时间不操作就超时的解决方法

    ECSHOP后台登陆后一段时间不操作就超时的解决方法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2012-05-27   客户生意比较好,因此比较忙,常常不在电脑前 ...

  6. 日常工作中 Oracle12c参数的处理:

    1. Oracle12c 修改过的参数 alter system set result_cache_mode=manual; alter system ; alter system set " ...

  7. CSS 选择器继承和层叠

    CSS选择器及其继承特性.层叠特性1.基本选择器  标记  id  class  这个就不再作介绍了 2.复合选择器  交集 交集选择器由两个选择器直接连接构成,其结果是选中二者各自元素范围的交集 其 ...

  8. pandas取值

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/24 15:03 # @Author : zhang chao # @Fi ...

  9. html image 圖像路徑

    src可以指定image路徑: alt可以設置替代的文本:當瀏覽器沒有辦法加載到圖片的時候,就會顯示替換的文本,提示什麼圖片未加載. width和heigt可以設置圖片的大小,從而對圖片進行縮放. h ...

  10. linux python3 selenuim firefox

    1.官网下载火狐浏览器最新版本复制到/usr/local/softwar 下 cd /usr/local/softwar 下 tar jxvf Firefox-latest-x86_64.tar.bz ...