死磕spring源码spring配置文件的加载流程

Posted 胡金水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了死磕spring源码spring配置文件的加载流程相关的知识,希望对你有一定的参考价值。

今天先来死磕spring配置文件的加载流程:

  1. AbstractApplicationContext #refresh-》

  2. AbstractApplicationContext #obtainFreshBeanFactory-》

  3. AbstractRefreshableApplicationContext #refreshBeanFactory-》

  4. XmlWebApplicationContext #loadBeanDefinitions-》

  5. AbstractBeanDefinitionReader #loadBeanDefinitions-》

  6. XmlBeanDefinitionReader #loadBeanDefinitions-》#doLoadBeanDefinitions-》#registerBeanDefinitions-》

  7. DefaultBeanDefinitionDocumentReader #registerBeanDefinitions-》 #doRegisterBeanDefinitions-》#parseBeanDefinitions-》parseDefaultElement


以上七步就是从spring的入口到解析xml配置文件,如果看到parseDefaultElement这个方法,那么恭喜你,已经看到希望了,可以看下具体源码:

 
   
   
 
  1. public static final String IMPORT_ELEMENT = "import";

  2. public static final String ALIAS_ELEMENT = "alias";

  3. public static final String BEAN_ELEMENT = "bean";

  4. public static final String NESTED_BEANS_ELEMENT = "beans";


  5. private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) {

  6. if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) {//解析import标签

  7. importBeanDefinitionResource(ele);

  8. }

  9. else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) {//解析alias

  10. processAliasRegistration(ele);

  11. }

  12. else if (delegate.nodeNameEquals(ele, BEAN_ELEMENT)) {//解析bean

  13. processBeanDefinition(ele, delegate);

  14. }

  15. else if (delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) {//解析beans

  16. // recurse

  17. doRegisterBeanDefinitions(ele);

  18. }

  19. }

以上是关于死磕spring源码spring配置文件的加载流程的主要内容,如果未能解决你的问题,请参考以下文章

Spring源码分析配置文件读取流程

Spring源码分析Bean加载流程概览

Spring源码分析Bean加载流程概览

[死磕 Spring26/43] --- IOC 之加载 bean:总结

死磕Spring源码系列

死磕 Spring----- IOC 之加载 bean:总结