Spring核心组件剖析

简介

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

Spring的核心组件有不少,但真正构成其骨骼的,是Core,Context和Beanspring

Bean

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

所以,Spring的核心思想经常被称做BOP(Bean Oriented Programming),面向Bean编程。设计模式

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

  1. Bean的定义框架

  2. Bean的建立工具

  3. Bean的解析spa

使用者只须要关注Bean的建立,其余两个过程由Spring内部完成。设计

image

1.总体架构

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

  • ListableBeanFactory: 表示这些Bean是可列表的

  • HierarchicalBeanFactory: 表示这些Bean有继承关系

  • AutowireCapableBeanFactory: 定义Bean的自动装配规则

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

2.Bean定义

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

image

Spring的配置文件中定义的<bean/>节点,成功解析后都会被转化为BeanDefinition对象,以后全部的操做都会在BeanDefinition对象之上进行。

3.Bean解析

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

image

Context

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

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

image

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接口中,层次关系以下:

image

  • 资源包装。Resource向上继承了InputStreamSource接口,全部的资源都经过InputStream来获取,从而屏蔽了资源提供者。

  • 资源加载。Resource下的ResourceLoader接口,全部资源加载者统一实现该接口就能加载全部的资源,例如以前的ApplicationContext。

2. 与Context创建关系

image

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

总结


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


做者: I'm coding

连接ACFLOOD

著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

若是您以为本文对您有所帮助,就给俺点个赞吧!

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

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

相关文章
相关标签/搜索