【Java进阶营】Spring源码解读-Xml解析Annotation解析

本文详细探讨了Spring框架中XML和Annotation两种方式解析bean的过程。从`prepareRefresh()`方法开始,逐步解析`AbstractApplicationContext`中的`obtainFreshBeanFactory()`方法,重点在于XML bean标签的解析,包括`DefaultBeanDefinitionDocumentReader`类中的`parseBeanDefinitions()`方法。接着转向Annotation标签解析,讲解了如何自定义Spring标签以及如何进行Annotation扫描,涉及`ComponentScanBeanDefinitionParser`类和`ClassPathBeanDefinitionScanner`的`doScan()`方法。通过对这两个部分的解析,全面理解了Spring的bean加载机制。
摘要由CSDN通过智能技术生成

首先,Spring上下文分为父Spring上下文和子Spring上下文。

   **子Spring就是SpringMVC的WebApplicationContext,同理服上下文就是spring框架本事的上下文Root上下文**

** 父Spring的监听器是ContextLoaderListener这个Listener,SpringMVC的入口就在DispatcherServlet。**

ContextLoaderListener父类方法

**ContextLoader#initWebApplicationContext()**

**ContextLoader#configureAndRefreshWebApplicationContext()**

**AbstractApplicationContext#refresh()**

首先解读ApplicationContext中的refresh()方法。

1.1 prepareRefresh() 方法

设置容器的一些状态:设置容器处于未关闭状态,设置active为激活状态,注入环境

1.2 AbstractApplicationContext#obtainFreshBeanFactory() 方法(xml解析bean标签)

调用到AbstractRefreshableApplicationContext#obtainFreshBeanFactory()方法

调用到AbstractRefreshableApplicationContext#refreshBeanFactory()方法

调用到AbstractXmlApplicationContext#loadBeanDefinitions()方法

调用到XmlBeanDefinitionReader#loadBeanDefinitions()方法

在loadBeanDefinitions方法中获取spring的配置文件流

然后调用到XmlBeanDefinitionReader#doLoadBeanDefinitions()

把xml转换成Document对象

调用到XmlBeanDefinitionReader#registerBeanDefinitions()方法

调用到DefaultBeanDefinitionDocumentReader#parseBeanDefinitions()方法

**此方法中有一个对子元素的for循环会调到此类中的#parseDefaultElement()方法 **

** 如果nodename 等于 bean 的话 也就是bean 的解析,对应着processBeanDefinition()方法,会在此进行解析下面会跟到BeanDefinitionParserDelegate#parseBeanDefinitionElement();**

** 重点解释parseBeanDefinitionElement()方法(开头用@表示,&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值