Spring框架的设计理念

1、Spring的总体架构

Spring框架的设计理念-深入分析Java Web技术内幕

Spring框架中的核心组件只有三个:Core、Context和Bean。

Spring框架的设计理念-深入分析Java Web技术内幕

(1)、Bean组件

主要解决三个问题:Bean定义、Bean创建、Bean解析。其中Bean定义和解析在Spring内部完成。

 

A、Bean创建的工厂模式:(顶级接口是BeanFactory)

Spring框架的设计理念-深入分析Java Web技术内幕

最终默认实现类是DefaultListableBeanFactory。而BeanFactory的三个子类接口,分别表示这些Bean是可列表的、有继承关系的、定义Bean的自动装配规则。这四个接口共同定义了Bean的集合、Bean之间的关系和Bean的行为。

 

B、Bean的定义主要有BeanDefinition描述

Spring框架的设计理念-深入分析Java Web技术内幕

 

C、Bean的解析(主要是对Spring配置文件的解析)

Spring框架的设计理念-深入分析Java Web技术内幕

 

(2)、Context组件

提供Spring运行时的环境,用以保存各个对象的状态。ApplicationContext是Context的顶级父类。

Spring框架的设计理念-深入分析Java Web技术内幕

ApplicationContext必须要完成以下几件事:

1) 标识一个应用环境。

2) 利用BeanFactory创建Bean对象。

3) 保存对象关系表。

4) 能够捕获各种事件。

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

 

(3)、Core组件

作为Spring的核心组件,其中包含了很多关键类,一个重要的组成部分就是定义了资源的访问方式。

Spring框架的设计理念-深入分析Java Web技术内幕

Context把资源的加载、解析和描述工作委托给了ResourcePatternResolver类来完成,它把资源的加载、解析和资源的定义整合在一起便于其他组件使用。

 

(4)、Ioc容器如何工作

1、创建BeanFactory工厂

构建Ioc容器,入口在AbstractApplicationContext类的refresh方法,这个方法包含这样几个步骤:
1) 构建BeanFactory,以便产生所需的bean。

2) 注册可能感兴趣的事件。

3) 创建Bean实例对象。

4) 触发被监听的事件。

Spring框架的设计理念-深入分析Java Web技术内幕

 

Spring框架的设计理念-深入分析Java Web技术内幕Spring框架的设计理念-深入分析Java Web技术内幕

 

 

2、创建Bean实例并构建Bean关系网

Bean的实例化,是从finishBeanFactoryInitialization方法开始。

FactoryBean是个工厂Bean,可以产生Bean(Bean的实例)的Bean,使用的是getObject方法。

 

下图是Bean实例创建流程图:

Spring框架的设计理念-深入分析Java Web技术内幕

通过调用getBean方法,创建Bean实例。

Spring框架的设计理念-深入分析Java Web技术内幕

3、Ioc容器扩展点

Spring框架的设计理念-深入分析Java Web技术内幕

对于Spring的Ioc容器,主要有BeanFactoryPostProcessor和BeanPostProcessor,它们分别在构建BeanFactory和构建Bean对象时调用。还有就是InitializingBean和DisposableBean,它们分别在Bean实例创建和销毁时被调用。用户可以实现这些接口中定义的方法,Spring会在适当的时候调用它们。

它们之间的关系可以用一个比喻来解释。

Spring框架的设计理念-深入分析Java Web技术内幕

 

 

4、Spring中AOP特性详解

 

基于Ioc容器,Spring本身实现了很多扩展的特性功能,AOP无疑是最实用的一个。

AOP是基于JDK的动态代理实现的。

Proxy产生代理类的过程:

Spring框架的设计理念-深入分析Java Web技术内幕

Spring AOP实现遵守AOP联盟的约定,同时Spring又扩展了它,增加了如Pointcut、Advisor等一些接口使得其更加灵活。

Spring框架的设计理念-深入分析Java Web技术内幕

Spring调用拦截器:

Spring框架的设计理念-深入分析Java Web技术内幕

Spring框架的设计理念-深入分析Java Web技术内幕

 

以上图 来自《深入分析Java Web技术内幕》

参考书籍:

《深入分析Java Web技术内幕》

相关文章: