spring-学习,IOC容器的构建
来源:互联网 发布:js面向对象编程案例 编辑:程序博客网 时间:2024/05/15 12:42
1.编程方式使用IOC容器的步骤为
1:定位文件得到resource(注释1):ClassPathResource classPathResource=new ClassPathResource("spring.xml");
2:创建容器 DefaultListableBeanFactory defaultListableBeanFactory=new DefaultListableBeanFactory();
3:创建beandefinitionReader(注释2),XmlBeanDefinitionReader XmlBeanDefinitionReader = new XmlBeanDefinitionReader(defaultListableBeanFactory);
4:使用reader进行载入注册,完成容器的装配
容器的初始化过程也与上述情况相似,以FileSystemXmlApplicationContext为例.
容器的初始化起源于refresh方法(ConfigurableApplicationContext规定实现,即说明:如果自定义容器想要能启动,必须继承该接口或者webapplicationContext),
接着执行容器的获取,正在的容器获取是由AbstractRefreshableApplicationContext完成,其中创建了DefaultListableBeanFactory,并开始loadBeanDefinitions(beanFactory);,这一过程包含了文件的定位,解析载入和注册。具体实现在AbstractXmlApplicationContext,代码如下
其中要注意的是,XmlBeanDefinitionReader对象在创建的时候就已经由父类构造器默认分配了一个DefaultResourceLoader,父类构造器代码如下
这里又setClassLoader(this),自身就是一个DefaultClassLoader(你也可以自定义ClassLoader,spring并没有将其写死),接下来解析location
PS,这里有一个疑问,前面说过传入的resourceLoader是DefaultResourceLoader,但是同时也实现了ResourcePatternResolver接口
具体获得resource的过程如下
这里我们就明白了,getResourceByPath不是defaultResourceLoader中的了,而是在FileSystemXmlApplicationContext中了的。到此我们已经定位得到了resource。
我们可以看到获得resource之后马上就对resource进行了解析,而这个解析过程是由xmlBeanDefinitionReader委托给documentReader来完成的,代码如下
documentReader为DefaultBeanDefinitionDocumentReader,doc为org.w3c.dom.Document,具体解析document跟一般情况一样。
产生beandefinitionHolder(其拥有beandefinition,和它的名字别名。),并将其注册到一个ioc容器中
产生beandefinitionHolder的过程
生成beanDefinition,并反射出类对象储存到beanDefinition中。
注册过程如下,建立一个映射关系的CurrentHashmap
注释1:resource的继承关系图如下,根据不同类型定位得到不同的resource。
注释2,虽然XML形式的文件是主流,但是spring依然为其准备了其他形式的reader,如下图
- spring-学习,IOC容器的构建
- Spring学习-IOC容器
- Spring架构详解之IOC容器的构建
- Spring源码学习IOC(5):IOC容器的依赖注入
- Spring源码学习IOC(6):IoC容器的高级特性
- spring的Ioc容器
- Spring的IoC容器
- spring的IOC容器
- Spring 的IOC 容器
- 【Spring学习笔记】Spring框架的IoC容器学习笔记
- 【Spring学习笔记】Spring框架的IoC容器学习笔记
- spring IOC学习,手动实现IOC容器
- spring学习之IOC容器
- Spring学习:IOC容器(xml)
- Spring学习–IOC容器
- Spring学习笔记:IOC容器
- spring学习笔记:Spring IOC容器的通俗认识
- Spring学习(四)Spring容器的IOC应用
- javaoo第2,3天
- jsp总结
- Java 自定义注解
- Linux查看中间几行
- 有向路径检查
- spring-学习,IOC容器的构建
- Jquery.EasyUI中树形插件的使用
- UMeng统计分析Android集成文档
- Java 位运算(与、或、非、异或)
- Android MediaPlayer的生命周期
- HDU5927 Auxiliary Set(dfs)
- 极客班
- linux网络编程之进程间通信基础(一):进程间通信概述
- 面向对象基础