spring基本工作原理例如以下:

1.查找bean配置文件

2.载入bean配置文件并解析生成中间表示BeanDefinition

3.注冊beanDefinition

4.假设是单例或lazy-init=false,则直接生成bean

spring将

1.查找bean配置文件

2.载入bean配置文件并解析生成中间表示BeanDefinition

3.注冊beanDefinition

这三部分开,能够提供很多其它的定制给用户。

spring将配置文件之类的文件资源抽象成一个Resource,封装了getInputStream。isClose等方法。

Resource有子类ClasspathResouce及FileSystemResource

Resouce攻克了第一步查找bean配置文件的问题

接着要解决第二步载bean配置文件并解析生成中间表示BeanDefinition。

spring这个是通过BeanDefinitionReader(接口)去做。

BeanDefinitionReader有实现XmlBeanDefinitionReader等。

XmlBeanDefinitionReader有个參数为容器BeanRegistry用于存放解析后的BeanDefinition。

即BeanDefinitionReader能够分三步完毕第二步任务:1.将Resource中的inputStream解析成xml的Dom形式 2.依据Dom。生成BeanDefinition 3.注冊到BeanRegistry中

这里将resource解析成Dom是用还有一个类DefaultDocumentLoader去做。

解析xml生成BeanDefinition则交给:BeanDefinitionParserDelegate去做。

注冊BeanDefinition就简单了,由于BeanRegitry容器是做为參数进入XmlBeanDefinitionReader的,所以直接调就能够了。

能够看出spring设计XmlBeanDefinitionReader类时。将这个类的职责分解,并将每一部分任务交给对应的类去做。

样例:

ClassPathResource res=new ClassPathResource("containerTest.xml"); //定位资源

        DefaultListableBeanFactory factory=new DefaultListableBeanFactory(); //BeanRegistry容器

        XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(factory); //

int n=reader.loadBeanDefinitions(res); //触发,XmlBeanDefinitionReader载入,解析配置文件,生成BeanDefinition的动作

B b=(B) factory.getBean("b");

最新文章

  1. likely && unlikely in GCC
  2. 设计模式C#实现(十)——桥接模式
  3. C#获取文件/字节数组MD5值方法
  4. C#壓縮文件幫助類 使用ICSharpCode.SharpZipLib.dll
  5. SQL Server取系统当前时间【转】
  6. kali linux 2.0 折腾笔记
  7. yo bootstrap mui 使用对比
  8. ecshop图片上传JPEG格式失败问题
  9. JAVA接口基础知识总结
  10. EBS并发程序监控
  11. python3实现二叉树的遍历与递归算法解析
  12. ipv4-only网络环境下访问ipv6站点
  13. HDU4403-模拟、数学
  14. python-部分redis
  15. Reader 与 Guava MultiReader
  16. jQuery中绑定事件的几种方法
  17. Mysql与InnoDB优化
  18. python存取数据进阶技巧-pickle,array模块
  19. C#学习之泛型功能与限制
  20. C#音视频网络流解码:H264视频和ACC音频

热门文章

  1. 使用 Pytorch 实现 skip-gram 的 word2vec
  2. dotTrace激活服务器
  3. 解决SimpleDateFormat线程安全问题
  4. vue 项目部署
  5. tornado框架基础06-SQLAlchemy连接数据库
  6. Mybatis中实体类属性和数据列之间映射的四种办法
  7. STM32F407 NVIC 中断优先级管理 个人笔记
  8. P2866 糟糕的一天
  9. 使用dd命令快速生成大文件或者小文件的方法
  10. HDU 5242 利用树链剖分思想进行贪心