前言
在这篇笔记中,主要记录SmartInitializingSingleton这个扩展点的应用,这个接口是在spring将所有的bean放入到spring容器之后,提供的一个扩展机制,在常用的框架中,我看到springcloud在将zk作为注册中心的时候,有用到这个扩展点
org.springframework.cloud.zookeeper.serviceregistry.ZookeeperServiceRegistry
目前还没有搞懂这个扩展点可以用来做什么,只是先记录一下原理和如何扩展,后续如果用到了,就再研究
原理
这个扩展点的调用逻辑是这样的
org.springframework.context.support.AbstractApplicationContext#finishBeanFactoryInitialization
org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons
/**
* 在该方法中,主要完成了以下几个操作
* 1.遍历所有的beanDefinitionName,完成合并bean的操作
* 2.如果当前bean是单实例的、非懒加载的、非抽象bean,就调用bean的后置处理器 完成实例化的操作
* 3.在所有bean都实例化完成之后,调用实现了SmartInitializingSingleton接口的bean对象