醋醋百科网

Good Luck To You!

庖丁解牛剖析 Spring 源码·XmlBeanFactory构造方法·小结

上一小节

庖丁解牛剖析 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

知识体系

结尾共勉

日拱一卒无有尽,功不唐捐终入海。

下一小节

庖丁解牛剖析 Spring 源码·为 Resource 添加编码

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言