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.
借助常用或典型的实现类:XmlBeanFactory
和 FileSystemApplicationContext
。
通过简单分析两者的实现和设计区别,来尝试理解两者本质或定义上的区别,同时我们也在两者的实现和设计中,学到了 Spring IoC 容器中基础的组成部分:
- BeanDefinition
- BeanDefinitionReader
- Resource
- DefaultListableBeanFactory
- loadBeanDefinitions() 方法
在平时的 Spring 学习和使用中,我们大部分都仅限于使用,有时候项目报错,即使百度,也会出现不能快速定位或者解决了但是又没完全解决(不理解)的情况 。
除了收集我们的日常 BUG 外,我们还需要对其浅层原理进行理解 。我想这应该是逃离“码农”的一小步 。
努力地靠近自己理解的正轨 。
经验总结扩展阅读
- 这些不知道,别说你熟悉 Spring
- 唐朝经历了多少年
- 地理风向图标怎么看
- spring boot项目使用mybatis-plus代码生成实例
- 使用 Spring Security 手动验证用户
- PSIN 谣言检测——《Divide-and-Conquer: Post-User Interaction Network for Fake News Detection on Social Media》
- SpringBoot实战派读书笔记---响应式编程
- 面向对象的照妖镜——UML类图绘制指南
- vue2双向绑定原理:深入响应式原理defineProperty、watcher、get、set
- Springboot集成阿里云短信