对于一名Java码农来说,Spring真是太重要了。目前Spring的体系已经发展得非常壮大,其底层基石core,beans,context非常牢固。
spring 体系结构图
个人认为,Spring最原始或者最基础的功能是“容器”,帮你管理着一堆bean的生命周期,任你取用,要想更好的使用Spring,还是得了解Bean的整个生命周期,首先了解Bean的初始化过程。本文采用XML配置文件的方式管理bean,分析XmlBeanFactory对于XML文件的解析过程。废话不多说,先上图:
Spring XmlBeanFacotry解析XML过程(1).jpg
上图给出了XmlBeanFactory将xml配置解析成BeanDefinition的过程,最上面给出的类是在解析过程中涉及到的,首先大致进行一个介绍:
private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) {
if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { importBeanDefinitionResource(ele); }
else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) { processAliasRegistration(ele); }
else if (delegate.nodeNameEquals(ele, BEAN_ELEMENT)) { processBeanDefinition(ele, delegate); }
else if (delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) { // recurse doRegisterBeanDefinitions(ele); }}
上述代码描述了BeanDefinitionParserDelegate对于不同element的解析,脏活累活中非常的一个部分
本文算是小小地总结了一下将XML解析成BeanDefinition的过程中涉及到的一些类,将XML解析出来其实是一个很简单的过程,但是Spring却用了非常多的类。究其原因还是为了考虑扩展性,不断地抽象,不断地将责任委派。这篇文章只介绍了DefaultElement的解析,下篇文章将介绍怎么自定义标签以及Spring怎么解析自定义标签。