本文主要是介绍30.如何在Spring所有Bean创建完后做扩展?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如何在Spring所有Bean创建完后做扩展?
哪里才算所有的bean创建完了。
首先是所有的配置bean会注册成BeanDefinition
然后根据BeanDefinition进行循环调用一个一个的getBean进行生产。
循环完所有的BeanDefiniton,通过BeanFactory的getBean方法生成所有的Bean
这个循环结束之后,所有的Bean就创建完了。
源码:
new ApplicationContext()里面有refresh()体现IOC容器加载。
refresh方法里面会调用finishBeanFactoryInitialization方法。
在finishBeanFactoryInitialization方法里面循环所有的BeanDefinition,一个一个getBean创建 。这个循环结束之后,那么所有的bean就创建完了。
【注意】:
扩展点1:
等所有的bean创建完之后,会再次循环所有的bean,看有哪些bean是否实现了SmartInitializingSingleton接口,如果实现了这个接口,就会继续调用afterSingletonsInstantiated方法。
扩展点2:
所有的bean创建完之后都会调用的扩展接口。
refresh方法里面会调用finishBeanFactoryInitialization方法的后面就是调用finishRefresh方法。
在finishRefresh方法里面会调用ContextRefreshedEvent事件,发布一个ContextRefreshed事件。
创建一个监听器来监听这个事件,就可以完成这个扩展。
这篇关于30.如何在Spring所有Bean创建完后做扩展?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!