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