parseDefaultElement()
进行默认标签解析delegate.parseCustomElement()
方法进行自定义解析默认标签解析过程,源码以下:java
private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { // 对 import 标签的解析 if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { importBeanDefinitionResource(ele); } // 对 alias 标签的解析 else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) { processAliasRegistration(ele); } // 对 bean 标签的解析 else if (delegate.nodeNameEquals(ele, BEAN_ELEMENT)) { processBeanDefinition(ele, delegate); } // 对 beans 标签的解析 else if (delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) { // recurse doRegisterBeanDefinitions(ele); } }
importBeanDefinitionResource()
方法完成对 import 标签的解析解析 import 过程较为清晰,整个过程以下:node
判断绝对路径的规则以下:spring
若是 location 为绝对路径则调用 loadBeanDefinitions()
,该方法在 AbstractBeanDefinitionReader 中定义spa
若是是相对路径则会根据相应的 Resource 计算出相应的绝对路径,.net
整个过程比较清晰明了:code
loadBeanDefinitions()
方法进行递归的 BeanDefinition 加载