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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。