Spring 5 源码解析-概述


  • 本篇文章基于spring-framework Release v5.3.5(7c2a72c) 版本进行源码分析。

  • 官方源码地址: https://github.com/spring-projects/spring-framework

  • fork 项目地址:https://gitee.com/streamplume/spring-framework.git (v5.3.5-learning 分支根据个人理解添加了注释)

    澄清概念,设定判准,构建体系。 - 傅佩荣

  • spring-framework 可以理解成一个Bean容器管理框架。在系统运行时,由spring-framework框架统一管理Bean实例对象的创建,依赖和销毁,而不用业务系统主动维护依赖关系。在编写业务代码时,只要软件工程师按照系统规划,做好业务逻辑类的抽象,封装,那么在运行系统时,只要根据需要简单修改配置,就可以轻松切换不同业务逻辑的实现。同时 spring-framework 对管理的依赖无侵入性。

  • spring-framework 项目在启动时, 使用 ApplicationContext 实现类,创建程序运行上下文(coentext),并创建管理bean对象实例的BeanFactory, 注册响应事件的监听器 (Listener),并根据需要管理不同功能组件的生命周期(Lifecycle) 。

spring-framework 主要接口和实现类:

  • org.springframework.beans.factory.BeanFactory
    spring-framework 核心顶层接口。定义了获取 bean 实例和处理 bean 相关属性判断的标准。spring-framework主要功能都是围绕实现该接口功能。

  • org.springframework.beans.factory.support.DefaultListableBeanFactory
    spring-framework 中BeanFactory接口的默认实现类。目前运行项目时,默认使用该类管理 bean 对象实例。

  • org.springframework.context.ApplicationContext
    spring-framework 运行上下文环境顶级接口。继承 EnvironmentCapable 接口,ResourceLoader 子接口, BeanFactory 子接口,MessageSource 接口,ApplicationEventPublisher 接口,即定义了运行上下文环境 需要实现的标准。

  • org.springframework.context.support.ClassPathXmlApplicationContext
    spring-framework 运行上下文环境的一个实现类。该类实现读取 ClassPath 路径下的xml文件,加载 bean 相关的配置,并管理 bean 的创建,依赖。

  • org.springframework.beans.factory.config.BeanFactoryPostProcessor
    BeanFactory 后置处理器接口。进行 BeanFactory 类的后置处理。bean 配置文件的后置处理。

  • org.springframework.beans.factory.config.BeanPostProcessor
    Bean 后置处理器接口。Bean 创建时进行特殊处理。例如 Bean 的动态代理就是通过 org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator 实现。

  • org.springframework.context.event.ApplicationEventMulticaster
    事件广播器。统一管理注册的事件监听器。

  • org.springframework.context.ApplicationListener
    事件监听器。定义是事件监听器使用标准。

  • org.springframework.context.ApplicationEvent
    事件接口。定义了事件的标准规范。

  • org.springframework.core.convert.ConversionService
    类型转换服务接口。定义了将配置文件中字符串转换成目标类型的标准。

  • org.springframework.core.convert.support.DefaultConversionService
    类型转换服务默认实现类。

  • org.springframework.context.Lifecycle
    特殊bean生命周期管理接口。

  • org.springframework.context.LifecycleProcessor
    Lifecycle 接口的统一管理类。运行上下文环境加载好后,调用 Lifecycle 接口start()的方法

参考资料:

Spring源码深度解析31精讲: https://www.bilibili.com/video/BV1iZ4y137CZ

孙哥说Spring5: https://www.bilibili.com/video/BV185411477k