BeanFactory是ioc容器的基礎(chǔ)曹洽,提供了最基本的檢索方法辽剧,具體的實(shí)現(xiàn)類(lèi)才能發(fā)現(xiàn)ioc容器真正的是怎么樣的。AutowireCapableBeanFactory繼承了BeanFactory偷崩,然后找了的抽象的實(shí)現(xiàn)類(lèi) AbstractAutowireCapableBeanFactory,最終找到了最簡(jiǎn)單的ioc容器的實(shí)現(xiàn)類(lèi)XmlBeanFactory阐斜。從XmlBeanFactory就能找到我們所需要的bean是怎么一步步的加載到Ioc容器里的谒出。
XmlBeanFactory只是提供了加載資源的入口,具體的加載過(guò)程交給XmlBeanDefinitionReader來(lái)做杀狡,這里就是一個(gè)最佳的實(shí)踐:面向?qū)ο缶幊谭×停唧w的類(lèi)做具體的事情恭陡,把過(guò)程操作抽象出一個(gè)對(duì)象來(lái)子姜。
doLoadDocument可以理解為解析xml的過(guò)程,比如常用的dom4j是解析楼入,當(dāng)然spring用的是它自己的解析xml技術(shù),因?yàn)槲覀冴P(guān)心的是bean如何加載的ioc容器里面的牧抽,所有這一步過(guò)程直接抽象doLoadDocument就當(dāng)作解析xml獲取Document的過(guò)程嘉熊。我們直接關(guān)注registerBeanDefinitions這個(gè)方法就好了。
總結(jié):new XmlBeanFactory的過(guò)程就是將xml解析,解析到beanDefinition這樣的數(shù)據(jù)結(jié)構(gòu),最后把它全部以beanName-beanDefinition的方式放到Map里孕惜。