SSM源码剖析读书笔记--第二章

本书是  互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析

Core Container模块

该模块(也叫Spring核心容器模块)是Spring的根基,由Beans、 Core、Context、SpEL四个子模块组成,这四个子模块如下所述。

◎ Beans模块和Core模块提供框架的基础部分,包含IoC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)功 能,使用 BeanFactory 基本概念来实现容器对Bean的管理,是所有 Spring应用的核心。Spring本身的运行都是由这种Bean的核心模型进行 加载和执行的,是Spring其他模块的核心支撑,是运行的根本保证。

 

◎ Context(包含 Spring-Context和 Spring-Context-Support两个子模 块)模块建立在Core模块和 Beans模块的坚实基础之上,并且集成了 Beans模块的特征,增加了对国际化的支持,也支持Java EE特征。 ApplicationContext接口是Context模块的焦点。Spring-Context-Support模 块支持集成第三方常用库到Spring应用上下文中,例如缓存 (EhCache、Guava)、调度Scheduling框架(CommonJ、Quartz)及模 板引擎(FreeMarker、Velocity)。

 

◎ SpEL模块(Spring-Expression Language)提供了强大的表达式语 言来查询和操作运行时的对象。

 

Spring的领域模型有三种,如下所述。

(1)容器领域模型(Context模型):也叫作上下文模型,是 Spring的掌控域,对 Spring核心领域模型进行生命周期管理。也可以将 其称为Spring的服务域,因为它为整个应用服务。

(2)核心领域模型(Bean模型):体现了 Spring的一个核心理 念,即“一切皆 Bean,Bean即一切”。Bean是应用运行时可执行的最小函 数式单元,可以是一个属性单元,也可以是 Java 中的一个函数对象, 更倾向于一种对象式的为某种特殊行为而生的可复用的概念,不受职责 或者大小的限制。例如 Spring 上下文是一个 Bean,一个简单的描述型 的对象也是一个Bean。Bean模型是Spring的核心服务实体域,是应用要 操作的本身,是每个线程的真正执行者,也是整个会话生命周期的管理 者,还是Spring对外暴露的核心实体。

(3)代理领域模型(Advisor模型):Spring代理的执行依赖于Bean 模型,但是Spring代理的生成、执行及选择都依赖于 Spring自身定义的 Advisor模型,只有符合 Advisor模型的定义,才能生成Spring代理。

 

Context模块即Spring上下文模块(也叫Spring Context模块),是 Core Container模块的子模块,它让 Spring 真正成为一个可执行框架。 这个模块扩展实现了 BeanFactory,让它不仅仅是 BeanFactory。笔者认 为,Context 模块虽然是 BeanFactory 的实现者,但更是一个框架,这才 是它的主要职责。

 

 

 

Spring上下文的设计

SSM源码剖析读书笔记--第二章

核心抽象类的职责。

(1)ApplicationContext 是整个容器的基本功能定义类,继承了 BeanFactory,这说明容器也是工厂的多态实现。其实它利用了代理的设 计方法,内部持有一个 BeanFactory 实例,这个实例替它执行 BeanFactory 接口定义的功能,这种典型的代理模式应用也是非常巧妙 的。

(4)AbstractRefreshableApplicationContext是 XmlWebApplicationContext的核心父类,如果当前上下文持有 BeanFactory,则关闭当前BeanFactory,然后为上下文生命周期的下一 个阶段初始化一个新的BeanFactory,并且在创建新容器时仍然保持对其 父容器的引用。

 

Spring容器BeanFactory的设计

 

Spring 的核心功能就是实现对 Bean 的管理,比如 Bean 的注册、注 入、依赖等。而Spring容器提供了依赖注入这个特征,以实现 Spring 容 器对 Bean的管理,而且使用 IoC实现了对Bean的配置与实际应用代码的 隔离。其中,Core Container模块的核心概念就是BeanFactory,它是所 有Spring应用的核心。因为Spring的核心模型就是Bean模型,所以需要 在管理Spring Bean的基础上保证Spring应用的运行。

 

BeanFactory接口是Bean容器设计中基本的职责定义接口,定义了按 照名称、参数、类型等几个维度获取、判断Bean实例的职能。

 

 

SSM源码剖析读书笔记--第二章

 

 

 

Spring父子上下文与容器

 

虽然在 ApplicationContext 接口中也声明了 BeanFactory 接口中的功 能,但其实 Application Context 和 BeanFactory 并不是一个概念,只是 由于在 AplicationContext 实例中持有了BeanFactory实例,也就是说 BeanFactory实例只是AplicationContext的一个属性,由这个属性来帮助 ApplicationContext对外提供BeanFactory定义的功能实现。

SSM源码剖析读书笔记--第二章

SSM源码剖析读书笔记--第二章