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、
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战