上一章我们的服务已经注册到spring容器中并完成实例化了,那么spring在实例化完成之后,就会进行一个最终的刷新操作,即方法finishRefresh
在这里会发布ContextRefreshedEvent
事件。dubbo的DubboDeployApplicationListener
实现了ApplicationListener
那么就会执行到onApplicationEvent
方法 ,上代码
@Override
public void onApplicationEvent(ApplicationContextEvent event) {
if (nullSafeEquals(applicationContext, event.getSource())) {
if (event instanceof ContextRefreshedEvent) {
//处理ContextRefreshedEvent事件
onContextRefreshedEvent((ContextRefreshedEvent) event);
} else if (event instanceof ContextClosedEvent) {
onContextClosedEvent((ContextClosedEvent) event);
}
}
}
进一步看一下onContextRefreshedEvent方法
//这里拿到就是DefaultModuleDeployer
ModuleDeployer deployer = moduleModel.getDeployer();
Assert.notNull(deployer, "Module deployer is null");
// 执行DefaultModuleDeployer的start方法
Future future = deployer.start();
继续start方法
@Override
public Future start() throws IllegalStateException {
// 这个方法其实在第一章中我们忽略的DubboSpringInitializer.