spring源码-refresh方法中的finishRefresh方法
refresh中的finishRefresh方法
以下几个方法是这个方法的核心模块

第一个方法清除缓存,王校长讲的好像不对啊?这里这个getBeanNamesForType方法,只查询到往BeanPostProcessor中缓存数据,但是没看到往Resource里放?它这里清除的缓存应该是这些?getBeanNamesForType方法还是挺复杂的,代码量也不少,不能够确定

好像就我们这种目前容器来说没有使用到啊?
先看下面的initLifecycleProcessor方法吧

熟悉的getBeanFactory,闭眼都知道他要拿到DefaultListableBeanFactory了,那么是否包含
我们刚创建,没有这个所谓的lifecycle,这个结构跟我们之前初始化广播器很像,同样的判断是否已经存在,然后不存在就创建一个新的去创建单例,那么在广播器那里初始化是为了支持广播器发布事件,那么这里肯定也能支持某种功能
是的,这里对lifecycle就是专门处理lifecycle的子类方法
然后进行调用

那么我们重新回来看

然后初始化之后就成功提供了对lifecycle子类的控制
拿到lifecycleprocessor之后我们去调用onRefresh方法,这里的方法和外层的onRefresh可不同

startBean开始生命周期,这里的bean生命周期只开始实现了lifecycle子类的bean

这里的getLifecycleBeans里面其实还是调用了getBeanNamesforType获取到了所有的实现了lifecycle的子类,如果我们没写MyLifeCycle那就是什么都没有,写了这里面就应该有我们的MyLifeCycle,然后phase用来避免多次载入,并且还能存储smartLifecycle,这个smartLifecycle是lifecycle的子类,如果实现了它就会进入到if语句中,那么phases就会有值,那么就会进入第二个if判断中,进行执行,其实就是说实现了smartLifecycle的由spring在这里自动的执行start生命周期,就是这些作用
接下来这个之前讲过了

就是广播发布一个事件,发布刷新上下文事件
最后一个方法registerApplicationContext,主要就是一个MbeanServer

主要就是用来spring对外提供服务管理的接口,如果设置了就可以通过Java managment进行监控

浙公网安备 33010602011771号