30.如何在Spring所有Bean创建完后做扩展?
2023-12-15 22:11:40
如何在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事件。
创建一个监听器来监听这个事件,就可以完成这个扩展。
文章来源:https://blog.csdn.net/weixin_43860634/article/details/134921422
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!