Spring的XML解析原理,这一次全搞懂再走( 三 )
在这个方法中首先会清除掉上一次创建的BeanFactory和对象实例 , 然后创建了一个DefaultListableBeanFactory对象并传入到了loadBeanDefinitions方法中 , 这也是一个模板方法 , 因为我们的配置不止有xml , 还有注解等 , 所以这里我们应该进入AbstractXmlApplicationContext类中:
protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {//创建xml的解析器 , 这里是一个委托模式XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);// Configure the bean definition reader with this context's// resource loading environment.beanDefinitionReader.setEnvironment(this.getEnvironment());//这里传一个this进去 , 因为ApplicationContext是实现了ResourceLoader接口的beanDefinitionReader.setResourceLoader(this);beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));// Allow a subclass to provide custom initialization of the reader,// then proceed with actually loading the bean definitions.initBeanDefinitionReader(beanDefinitionReader);//主要看这个方法loadBeanDefinitions(beanDefinitionReader); }
首先创建了一个XmlBeanDefinitionReader对象 , 见名知意 , 这个就是解析xml的类 , 需要注意的是该类的构造方法接收的是BeanDefinitionRegistry对象 , 而这里将DefaultListableBeanFactory对象传入了进去(别忘记了这个对象是实现了BeanDefinitionRegistry类的) , 如果你足够敏感 , 应该可以想到后面会委托给该类去注册 。 注册什么呢?自然是注册BeanDefintion 。 记住这个猜想 , 我们稍后来验证是不是这么回事 。 接着进入loadBeanDefinitions方法获取之前保存的xml配置文件路径 , 并委托给XmlBeanDefinitionReader对象解析加载:
protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws BeansException, IOException {Resource[] configResources = getConfigResources();if (configResources != null) {reader.loadBeanDefinitions(configResources);}//获取需要加载的xml配置文件String[] configLocations = getConfigLocations();if (configLocations != null) {reader.loadBeanDefinitions(configLocations);} }
最后会进入到抽象父类AbstractBeanDefinitionReader中:
public int loadBeanDefinitions(String location, @Nullable Set
- 多就是好吗?解析智能手机多摄发展困局
- 新基建下,系统集成商数字化建设及渠道管理深度解析
- 四个维度解析区域发展与治理
- 基于Spring+Angular9+MySQL开发平台
- 智媒视角看深圳用数据解析城市
- “联邦的战斗力量”再现,华硕Z490主板机动战士高达版解析
- 天翼云全国首个工业互联网平台二级解析节点上线
- 在美国当快递小哥赚钱吗?西瓜视频解析除了努力,运气也很重要
- 蚂蚁庄园月有阴晴圆缺答案解析 12月18日今天支付宝蚂蚁庄园答案大全
- 如何做到性能翻倍 NVIDIA Ampere架构解析