Spring源码学习-容器初始化之FileSystemXmlApplicationContext(一)构造函数
来源:互联网 发布:网络播放器哪个最好 编辑:程序博客网 时间:2024/06/06 00:52
宅男Coder,没有其他爱好,闲暇之余抱着瞻仰的心态去阅读一下Spring的源码,期许能收获一支半解。要学习Spring的源码,第一步自然是下载和编译Spring的源码,这个我在之前的博文中已经发表过了。具体可参考:《SpringFramework源码下载和编译教程》
面对茫茫多的Spring的工程和代码,很多人可能会无从下手。其实想想,Spring也是有入口的,那就是配置文件的加载。Spring容器的构建完全是基于配置文件的配置的。不论是Web工程,还是普通的Java应用,加载Spring配置文件都是首要的工作。所以,我就从配置文件的加载学起。
要加载配置文件,首先当然是要找到该文件。大多数人通常都是在Web应用中使用Spring。网上搜搜配置,配置文件的名字就叫约定的:applicationContext.xml,然后往编译路径下一扔,Spring自然就好用了,就没过多的关注过其他容器初始化的问题。其实,一个自然应该想到的问题就是:一个普通的J2SE应用该如何使用Spring呢?答案很简单:new 出一个ApplicationContext的实例就好了。例如:
private static final String SPRINT_FILEPATH_CONTEXT = "D:\\workspace-home\\OpenSourceStudy\\src\\main\\resources\\spring\\app-context.xml"; ApplicationContext appContext = new FileSystemXmlApplicationContext( SPRINT_FILEPATH_CONTEXT http://longjingbailing.com);
只需上述一行代码,一个基于指定的配置文件的Spring容器就初始化完成了。
下面,我们来仔细看看FileSystemXmlApplicationContext这个类:
一共七个构造函数和一个复写的方法。我们现在重点关注构造函数,除前两个之外,其他的构造函数都最终指向构造函数:
public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException { super(parent); setConfigLocations(configLocations); if (refresh) { refresh(); sducc1122}
只是对没有传入的参数,给了一个默认值。
该构造函数有三个参数:
String[] configLocations - 配置文件的路径数组。是数组也就是说,支持同时传入多个配置文件路径。
boolean refresh - 是否刷新,如果是true,则会开始初始化Spring容器, false则暂时不初始化Spring容器。
ApplicationContext parent - Spring容器上下文。即可以传入已经初始化过的Spring容器,新初始化的容器会包含parent上下文中的内容,例如:父容器中定义的bean等。
注:refresh()方法可谓Spring的核心的入口函数,Spring容器的初始化正是由此开始。一些Spring学习的书中,也向学习Spring的读者推荐,如果感到无所适从,可从该方法入手,研究Spring的整个生命周期。后续我们也会从该方法入手重点研究。现在只需理解,其为Spring容器初始化的一个“开关”即可。
前两个构造函数与该构造函数最大的区别就是,没有调用refresh函数。也就是说,Spring容器,此时并未初始化。此时如果用getBean方法去获取Bean的实例,会报容器并未初始化的异常。
面对茫茫多的Spring的工程和代码,很多人可能会无从下手。其实想想,Spring也是有入口的,那就是配置文件的加载。Spring容器的构建完全是基于配置文件的配置的。不论是Web工程,还是普通的Java应用,加载Spring配置文件都是首要的工作。所以,我就从配置文件的加载学起。
要加载配置文件,首先当然是要找到该文件。大多数人通常都是在Web应用中使用Spring。网上搜搜配置,配置文件的名字就叫约定的:applicationContext.xml,然后往编译路径下一扔,Spring自然就好用了,就没过多的关注过其他容器初始化的问题。其实,一个自然应该想到的问题就是:一个普通的J2SE应用该如何使用Spring呢?答案很简单:new 出一个ApplicationContext的实例就好了。例如:
private static final String SPRINT_FILEPATH_CONTEXT = "D:\\workspace-home\\OpenSourceStudy\\src\\main\\resources\\spring\\app-context.xml"; ApplicationContext appContext = new FileSystemXmlApplicationContext( SPRINT_FILEPATH_CONTEXT http://longjingbailing.com);
只需上述一行代码,一个基于指定的配置文件的Spring容器就初始化完成了。
下面,我们来仔细看看FileSystemXmlApplicationContext这个类:
一共七个构造函数和一个复写的方法。我们现在重点关注构造函数,除前两个之外,其他的构造函数都最终指向构造函数:
public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException { super(parent); setConfigLocations(configLocations); if (refresh) { refresh(); sducc1122}
只是对没有传入的参数,给了一个默认值。
该构造函数有三个参数:
String[] configLocations - 配置文件的路径数组。是数组也就是说,支持同时传入多个配置文件路径。
boolean refresh - 是否刷新,如果是true,则会开始初始化Spring容器, false则暂时不初始化Spring容器。
ApplicationContext parent - Spring容器上下文。即可以传入已经初始化过的Spring容器,新初始化的容器会包含parent上下文中的内容,例如:父容器中定义的bean等。
注:refresh()方法可谓Spring的核心的入口函数,Spring容器的初始化正是由此开始。一些Spring学习的书中,也向学习Spring的读者推荐,如果感到无所适从,可从该方法入手,研究Spring的整个生命周期。后续我们也会从该方法入手重点研究。现在只需理解,其为Spring容器初始化的一个“开关”即可。
前两个构造函数与该构造函数最大的区别就是,没有调用refresh函数。也就是说,Spring容器,此时并未初始化。此时如果用getBean方法去获取Bean的实例,会报容器并未初始化的异常。
- Spring源码学习-容器初始化之FileSystemXmlApplicationContext(一)构造函数
- Spring源码学习(一):IOC容器初始化
- Spring ApplicationContext 容器 FileSystemXmlApplicationContext
- spring源码学习--FileSystemXmlApplicationContext(二)
- spring 源码学习-容器初始化-1
- spring 源码学习-容器初始化-2
- Spring IOC源码详解之容器初始化
- Spring IOC源码详解之容器初始化
- Spring IOC源码详解之容器初始化
- spring源码学习之路---IOC容器初始化要义之bean定义载入(五)
- spring源码学习之路---IOC容器初始化要义之bean定义载入
- spring源码学习之路---IOC容器初始化要义之bean定义载入(五)
- spring源码学习之路---IOC容器初始化要义之bean定义载入(四)
- Spring源码解读-Spring IoC容器初始化之资源定位
- Spring源码解读-Spring IoC容器初始化之资源解析
- Spring源码解读-Spring IoC容器初始化之资源注册
- spring源码学习之路---深度分析IOC容器初始化过程(四)
- spring源码学习之路---深度分析IOC容器初始化过程
- 让图片自适应外DIV 而不是拉伸的方法
- 比尔盖茨的十句话,让你改变一生
- ios滤镜Core Image
- Fibnacci 序列
- ant安装过程
- Spring源码学习-容器初始化之FileSystemXmlApplicationContext(一)构造函数
- ssh 的移植
- Spinner 样式大全
- 6个结果搞懂 GCD中 QUEUE 和 async/sync
- A20在Linux中Livesuit不能烧写问题
- JDK源码学习--System.identityHashCode(Object)
- dwz框架 时间控件不支持onclick,onchange事件
- Win7 64位环境下JDK和Eclipse的选择与安装
- sendEmail发送带有附件的邮件