tmpspring流程

spring流程

AbstractApplicationContext.refresh()
1、创建beanFactory{
1、new DefaultListableBeanFactory(null)
2、给beanFactroy设置一堆属性组件供以后使用
3、设置beanFactory的autowireCandidateResolver,
beanFactory.setAutowireCandidateResolver(
new QualifierAnnotationAutowireCandidateResolver());
4、加载xml变为BeanDefinition对象、实例化bean对象
loadBeanDefinitions(beanFactory);//-->AbstractXmlApplicationContext{
xmlreader.loadBeanDefinitions(configResources);{
// 1、xml转doc
Document doc = documentLoader.loadDocument(xxx);{// DefaultDocumentLoader

}
// 2、doc转BeanDefinition
documentReader.registerBeanDefinitions(doc, createReaderContext(resource));{
// DefaultBeanDefinitionDocumentReader
1、创建delegate = new BeanDefinitionParserDelegate对象
2、交给delegate去解析<bean>节点,注意这里得到的是holder对象
BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele);{
1、AbstractBeanDefinition bd = new GenericBeanDefinition;
2、一堆ifelse解析标签属性设置到bd对象属性上
}
3、注册到beanFactory的map里
BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, getReaderContext().getRegistry());
/*
beanFactory
bd属性
|-beanDefinitionMap 类型Map<String, BeanDefinition>,key是beanName,value是bd对象
|-beanDefinitionNames 类型List<String>,元素是beanName
*/
}
}

}

}

2、给beanFactory设置一堆众小弟

3、提前实例化beanFactroy里所有 BeanDefinitionRegistryPostProcessor 和 BeanFactoryPostProcessor 实例
调用它们的方法修改beanFactory做个性化逻

4、提前实例化beanFactory里所有 BeanPostProcessor ,跟C同理通过getBean实例化并分为4组,
加入到beanFactory的BeanPostProcessor属性里(这是个ArrayList),
注:会先手动加入new BeanPostProcessorChecker(用于打印普通bean创建成功日志),等上面4组加入完成,最后再手动加入new ApplicationListenerDetector(探测普通bean如果实现了ApplicationListener接口,按照监听者模式这些bean就是监听器,把这些bean的引用放到一个地方,当有事件发生时,调用所有监听器)

5、

posted @   bplan2010  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示