springBean解析过程

238 阅读1分钟

1、大体解析过程

  • spring 是一个框架 ,在我们的整个开发流程中,所有的框架生产几乎都依赖与spring.
  • spring帮我们起到了一个IOC容器的作用,用来承载整体的bean对象
  • 帮我们进行了整个对象从创建到销毁的整个生命周期的管理
  • 配置文件-ioc容器创建
  • BeanFactory-xmlBeanFactory-beanFactoryPostprocessor-classPathResource-BeanDefinitionReader-xmlBeanDefinitionReader-loadBeanDefinitions

2、xmlBeanFactory

  • xmlBeanFactory 继承与DefaultlistableBeanFactory,而 DefaultlistableBeanFactory
  • 是整个bean加载的核心部分。是spring 注册及加载bean的默认实现。
  • 对于xmlBeanFactory 和 DefaultlistableBeanFactory的不同之处在于,xmlBeanFactory使用了自定义的xml读取器xmlBeanDefinitionReader。实现个性化的读取。

3、xmlBeanDefinitionReader

  • xmlBeanDefinitionReader继承abstracteanDefinitionReader,来使用resourceloader将资源文件转换为对应的resource文件。通过documentLoader对resource文件进行转换,将resource转换为document文件。通过DefaultBeanDefinitionDocumentReader对document解析。

4、Beanfactory和ApplicationContext俩种IOC的区别

  • Beanfactory 不具备对资源定义的能力。ApplicationContext可以。
  • ApplicationContext 允许上下文嵌套。这块可以在bean的查找中体现。首先检查当前上下文,其次是父上下文,逐级向上。
  • ApplicationContext许多抽象子类为beanFactory的实现。比如classpathxmlapplicationcontext.

5、bean标签的解析与注册

  • 方法processBeanDefinition(Element ec ,BeanDefinitionParserDelegate delegate )
  • 这里设计到一个类BeanDefinitionParserDelegate 通过delete.parseBeanDefinitionElement()方法进行元素解析。返回BeanDefinitionHolder类型的实例。

截屏2022-03-18下午6.32.40.png

6、总结

  • spring 启动时,调用refresh();->configurableListableBeanFactory--映射BeanDefinition内容;
  • invokeBeanFactoryPostProcessor 修改BeanDefinition内容;->finishBeanFactoryInit 实例化