上一小节
庖丁解牛剖析 Spring 源码·StandardEnvironment构造方法
前情提要
在 庖丁解牛剖析 Spring 源码·初试锋芒 一节中创建了 DEMO 示例。然后依次分析了 DEMO 中 ClassPathResource 和 XmlBeanFactory 源码。
至此,XmlBeanFactory 源码中涉及到的类已经分析完毕,本节将代码的流程串联起来。
执行流程·示例代码
庖丁解牛剖析 Spring 源码·初试锋芒:通过 BeanFactory 加载 spring.xml 配置文件,解析 xml 文档,通过 bean 的 id 获取 bean ,将返回结果 Object 强转为 TestBean ,在控制台输入 TestBean 的属性信息。
执行流程·资源封装
庖丁解牛剖析 Spring 源码·ClassPathResource:对 classpath 路径(在 maven 项目中对应 src/main/resources 目录)下的资源文件进行封装。
执行流程·XmlBeanFactory 构造方法
子类构造器调用 super(),优先初始父类构造器
庖丁解牛剖析 Spring 源码·AbstractBeanFactory构造方法:构造方法为空。
庖丁解牛剖Spring 源码·
AbstractAutowireCapableBeanFactory 构造方法:在成员属性
ignoredDependencyInterfaces (在为 bean 自动注入属性信息时需要忽略的接口)中添加了 庖丁解牛剖析 Spring 源码·Aware 的三个子类,并分析忽略的原因。
庖丁解牛剖析 Spring 源码·
DefaultListableBeanFactory 构造方法:调用父类构造方法。
庖丁解牛剖析 Spring 源码·XmlBeanFactory:成员属性 庖丁解牛剖析 Spring 源码·XmlBeanDefinitionReader实例化 ;优先调用其父类构造方法 庖丁解牛剖析 Spring 源码·
AbstractBeanDefinitionReader构造方法。
庖丁解牛剖析 Spring 源码·
AbstractBeanDefinitionReader构造方法 中将成员属性 ResourceLoader 实例化为
PathMatchingResourcePatternResolver 进而调用 庖丁解牛剖析 Spring 源码·DefaultResourceLoader构造方法,进而调用 庖丁解牛剖析 Spring 源码·ClassUtils 获取默认类加载器。
庖丁解牛剖析 Spring 源码·
AbstractBeanDefinitionReader构造方法 中将成员属性 Environment 实例化为 庖丁解牛剖析 Spring 源码·StandardEnvironment构造方法。
庖丁解牛剖析 Spring 源码·XmlBeanFactory 在构造方法中调用父类构造方法、调用 庖丁解牛剖析 Spring 源码·XmlBeanDefinitionReader实例化 的 loadBeanDefinitions() 加载 BeanDefinition();
流程图
以下为流程图对应的 plantuml 的代码
@startuml
title "XmlBeanFactory 构造方法源码执行流程图"
group "资源封装"
:ClassPathResource 封装 ClassPath 路径下的资源;
end group
group "AbstractBeanFactory 构造方法"
note left:AbstractAutowireCapableBeanFactory 的父类
:构造方法为空,不执行任何操作;
end group
group "AbstractAutowireCapableBeanFactory 构造方法"
note left:XmlBeanFactory 的父类
:调用 AbstractBeanFactory 构造方法;
:为成员属性 bean 自动注入时需要忽略的类的集合中添加 Aware 的子类;
end group
group "XmlBeanFactory 中成员属性 XmlBeanDefinitionReader 实例化"
note left:"成员属性"
:执行 new XmlBeanDefinitionReader();
end group
group "AbstractBeanDefinitionReader 构造方法"
note left:"XmlBeanDefinitionReader 的父类"
:成员属性 ResourceLoader 实例化为 PathMatchingResourcePatternResolver;
:PathMatchingResourcePatternResolver 构造方法中将 ClassLoader 实例化为 DefaultResourceLoader;
:DefaultResourceLoader 中将 ClassLoader 赋值 ClassUtils.getDefaultClassLoader();
:成员属性 Environment 实例化为 StandardEnvironment;
end group
group "XmlBeanDefinitionReader 构造方法"
:调用 AbstractBeanDefinitionReader 的构造方法;
end group
group "加载 BeanDefinition"
:XmlBeanFactory 调用 XmlBeanDefinitionReader#loadBeanDefinitions() ;
end group
@enduml
知识体系
结尾共勉
日拱一卒无有尽,功不唐捐终入海。