SmartInitializingSingleton接口,实现SmartInitializingSingleton的接口后,当所有单例 bean 都初始化完成以后, Spring的IOC容器会回调该接口的 afterSingletonsInstantiated()方法。
主要应用场合就是在所有单例 bean 创建完成之后,可以在该回调中做一些事情,原理就是在启动类启动后,经过refresh,来在容器中初始化所有的非懒加载的单例对象,通过遍历beandefinitionnames,去获取或者初始化对应的对象,完成之后,会再遍历一遍,并在循环中判断bean是否实现了SmartInitializingSingleton,若是,则调用afterSingletonsInstantiated()方法,再DefaultListableBeanFactory的preInstantiateSingletons()方法中: