一、版本与目录结构
对于所有非初学者来说认识一个maven项目的结构是很容易上手的,在此还是啰嗦的说一句创建过程,本猿是通过ideal工具直接new一个spring
项目之后得到一个项目如下包含了spring
核心的所有依赖jar
文件;
- src/main/java 用于展现 Spring 的主要逻辑。
- src/main/resources 用于存放系统的配置文件。
- src/test/java 用于对主要逻辑进行单元测试。
- src/test/resources 用于存放测试用的配置文件。
核心类的介绍
- 关系
通过 beans 工程的结构介绍,我们现在对 beans 的工程结构有了初步的认识,接下来我们来认识一下核心的类文件,既然是探索spring
那么最有名的就是BeanFactory
了,它是整个bean
加载的核心部分。
- 作用
从上面的类图以及层次结构图中,我们可以很清晰地从全局角度了解 DefaultListableBean- Factory的脉络。让我们先简单地了解各个类的作用;
- AliasRegistry: 定义对 alias 的简单增删改等 操作。
- SimpleAliasRegistry: 主要使用 用map 作为 为alias 的缓,并对接口AliasRegistry行进行实现。
- SingletonBeanRegistry: 定义对单例的注册及获取。
- DefaultSingletonBeanRegistry: 对接口 SingletonBeanRegistry 各函数的实现。
- HierarchicalBeanFactory: 继承 BeanFactory, 也就是在 BeanFactory 定义的功能的基础上增加了对 parentFactory 的支持。
- BeanDefinitionRegistry: 定义对 BeanDefinition 的各种增删改操作。
- FactoryBeanRegistrySupport: 在 DefaultSingletonBeanRegistry 基础上增加了对 FactoiyBean 的特殊处理功能。
- ConfigurableBeanFactory: 提供配置 Factory 的各种方法。
- ListableBeanFactory: 根据各种条件获取 bean 的配置清单。
- AbstractBeanFactory: 综合 FactoryBeanRegistrySupport 和 ConfigurableBeanFactory 的 功能。
- AutowireCapableBeanFactory: 提供创建 bean 、自动注入、初始化以及应用 bean 的后 处理器。
- AbstractAutowireCapableBeanFactory: 综合 AbstractBeanFactory 并对接口 Autowire Capable BeanFactory 进行实现。
- ConfigurableListableBeanFactory: BeanFactory 配置清单,指定忽略类型及接口等。
- DefaultListableBeanFactory: 综合上面所有功能,主要是对 bean 注册后的处理。
- 主角
通过上图我们可以清楚地看到BeanFactory
与之相关的各个类的依赖关系。那么今天的主角来了,它就是DefaultListableBeanFactory
, 是Spring 注册及加载 bean 的默认实现;以及它的唯一子类XmlBeanFactory
,是spring
解析xml
文件的核心部分。
总结
通过查阅源码本猿发现XmlBeanFactory
对 DefaultListableBeanFactory
类进行了扩展,主要用于从 XML 文档中读取 BeanDefinition
, 对于注册及获取 bean
都是使用从父类 DefaultListableBeanFactory
继承的方 法去实现,而唯独与父类不同的个性化实现就是增加了 XmlBeanDefinitionReader
类型的 reader 属性。在 XmlBeanFactory
中主要使用 reader 属性对资源文件进行读取和注册。
后续
下一章节继续分析spring
是如何加载xml
文件。