Spring 深入——IoC 容器 01( 三 )

refresh() 过程 。
refresh() 过程牵涉到 IoC 容器启动的一系列复杂操作,对于不同的容器,这些操作都是类似的,因此在基类(AbstractApplicationContext)中对其统一封装 。
public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException {super(parent);this.setConfigLocations(configLocations);if (refresh) {this.refresh();}}功能二: 如何从文件系统中加载 XML 的 Bean 定义资源有关 。
简单来说就是如何在文件系统中读取以 XML 形式存在的 BeanDefinition 做准备(并不是直接解析),因为不同的 AC 实现对应着不同的读取 BeanDefinition 的方式 。
protected Resource getResourceByPath(String path) {if (path != null && path.startsWith("/")) {path = path.substring(1);}return new FileSystemResource(path);}上面是这个功能的实现,可以看到,调用这个方法可以得到 Resource 资源定位——FileSystemResource
小结本次学习了 IoC 容器的一些介绍和概念,抓住了在 Spring 中 IoC 容器的两大实现方式:BeanFactory 和 ApplicationContext.
借助常用或典型的实现类:XmlBeanFactoryFileSystemApplicationContext
通过简单分析两者的实现和设计区别,来尝试理解两者本质或定义上的区别,同时我们也在两者的实现和设计中,学到了 Spring IoC 容器中基础的组成部分:

  • BeanDefinition
  • BeanDefinitionReader
  • Resource
  • DefaultListableBeanFactory
  • loadBeanDefinitions() 方法
这些与 IoC 容器密切相关 。
在平时的 Spring 学习和使用中,我们大部分都仅限于使用,有时候项目报错,即使百度,也会出现不能快速定位或者解决了但是又没完全解决(不理解)的情况 。
除了收集我们的日常 BUG 外,我们还需要对其浅层原理进行理解 。我想这应该是逃离“码农”的一小步 。
努力地靠近自己理解的正轨 。

经验总结扩展阅读