接着说第一节里面的第二个函数和第三个函数:第二个函数很简单创建一个 DefaultListableBeanFactory,从前面看,先是销毁了老的bean,第二个函数创建了新的工厂,,第三个函数自然就是去解析我们的文件,真正的去做初始化的工作了。
1.2.2.1.2 createBeanFactory() :在类 AbstractRefreshableApplicationContext 中仅仅只调用如下方法:
return new DefaultListableBeanFactory(getInternalParentBeanFactory());
我们首先去看 DefaultListableBeanFactory 的构成函数,发现需要传入一个 BeanFactory 的参数。 然后再看函数: getInternalParentBeanFactory() 。方法体也只有一句话
return (getParent() instanceof ConfigurableApplicationContext ) ?((ConfigurableApplicationContext ) getParent()).getBeanFactory() : (BeanFactory) getParent();
在看函数 getParent() 事实上返回父类 AbstractApplicationContext 里的字段
private ApplicationContext parent ;
1.2.2.1.3 loadBeanDefinitions(beanFactory) :通过一个 XmlBeanDefinitionReader 装载 bean 定义。 在类:
AbstractXmlApplicationContext 中的实现为:
==================================================================
/**
* 这里使用 XMLBeanDefinitionReader 来载入 bean 定义信息的 XML 文件,查看
* XMLBeanDefinitionReader 构造函数需要的是一个 BeanDefinitionRegistry 类。
* 查看类图, DefaultListableBeanFactory 实现了 BeanDefinitionRegistry 类,
*/
XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory) ;
/**
* 这里配置 reader 的环境,其中 ResourceLoader 是我们用来定位 bean 定义信息资源位置的
* 因为上下文本身实现了 ResourceLoader 接口,所以可以直接把上下文作为
* ResourceLoader 传递给 XmlBeanDefinitionReader
*/
beanDefinitionReader.setResourceLoader( this );
beanDefinitionReader.setEntityResolver( new ResourceEntityResolver( this ));
// 该方法为一个空的方法,用以允许子类实现,来初始化 the reader,
initBeanDe finitionReader(beanDefinitionReader);
// 这里转到定义好的 XmlBeanDefinitionReader 中对载入 bean 信息进行处理
loadBeanDefinitions(beanDefinitionReader);
====================================================================
1.2.2.1.3.1 loadBeanDefinitions(beanDefinitionReader): 使用传进来的
XmlBeanDefinitionReader 来装载 bean 的定义。在 AbstractXmlApplicationContext 中的定义:
====================================================================
protected void loadBeanDefinitions(XmlBeanDefinitionReader reader){
// 函数: getConfigResources 代码: return null;
Resource[] configResources = getConfigResources();
if (configResources != null ) {
reader .loadBeanDefinitions(configResources);
}
/**
* 得到 AbstractRefreshableConfigApplicationContext 的字 段 configLocations
* 的值,也就 FileSystemXmlApplicationContext (String configLocation) 的参数。(前面函数1.1 将值存入)
*/
String[] configLocations = getConfigLocations();
if (configLocations != null ) {
/ / 调用 XmlBeanDefinitionReader 来载入 bean 定义信息。
reader.loadBeanDefinitions(configLocations) ;
}
}
====================================================================
本站支持 pay for your wishes
相关推荐
3、源码分析-IOC容器的初始化 4、源码分析-IOC容器的依赖注入 5、源码分析-IOC容器的高级特性 三阶段 Spring AOP的涉及原理及具体实践 SpringJDBC的涉及原理及二次开发 SpringMVC框架设计原理及手写实现 四阶段 ...
本文深入探讨了Spring框架中IoC容器的源码机制,涵盖了容器的初始化、Bean工厂的实例化、Bean定义的读取及Spring Bean的生命周期管理。通过精细的分析,本文揭示了AnnotationConfigApplicationContext的实例化过程,...
为Spring提供了基础的Web功能支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IOC容器; spring-webmvc: 主要提供对SpringMVC的支持,例如SpringMVC中的DispatcherServlet就是该模块中提供的; ...
本文深入探讨了Spring IoC容器的加载过程及其源码实现,揭示了Spring中最为根本的概念之一。这包括从AnnotationConfigApplicationContext的实例化开始,到DefaultListableBeanFactory工厂的建立,再到...
1、通过分析 Spring 源码,深刻掌握核心原理和设计思想 2、通过本课的学习,完全掌握 SpringIOC 容器的初始化细节,并手绘时序图 3、掌握看源码不
简单的说,在web容器中,通过ServletContext为Spring的IOC容器提供宿主环境,对应的建立起一个IOC容器的体系。其中,首先需要建立的是根上下文,这个上下文持有的对象可以有业务对象,数据存取对象,资源,事物管理...
整个视频课程将由浅入深,介绍spring5源码的构建、spring5IOC容器的初始化过程、bean的声明周期过程、spring BeanFactoryPostporcessor并且结合原理给出当前流行的应用框架如何利用spring的源码知识写出优雅的代码,...
包括内容:Spring体系结构、Spring重要接口讲解(BeanFactory继承体系、BeanDefinition继承体系、ApplicationContext继承体系)、IOC/DI(容器初始化流源码分析)、AOP原理(解析流程,代理流程,执行流程)、事务...
java进阶源码分析专题常用设计模式线程与并发锁的使用深度理解synchronized、volatile、cas手写ASQSpring5IOC容器设计原理及高级特性AOP设计原理FactoryBean与BeanFactorySpring事务处理机制Spring JDK动态代理...
8.4.3 改变初始化和销毁方式 8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 ...
8.4.3 改变初始化和销毁方式 8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 ...
8.4.3 改变初始化和销毁方式 8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 ...
8.4.3 改变初始化和销毁方式 8.4.4 改变异常处理的方式 8.5 小结 第九章 CVS使用指南 9.1 CVS介绍 9.1.1 CVS简介 9.1.2 为什么要使用CVS 9.2 建立CVS的开发环境 9.2.1 下载CVS 9.2.2 配置CVS 9.3 CVS的使用方法 ...