Motan spring-boot 启动分析

2016-10-26  本文已影响0人  _流浪的猫_

Motan spring-boot启动实际上是Motan注解方式的启动流程,入口类为motan-springsupport中的AnnotationBean

@Bean
public AnnotationBean motanAnnotationBean() {
    AnnotationBean motanAnnotationBean = new AnnotationBean();
    motanAnnotationBean.setPackage("com.weibo.motan.demo.server");
    return motanAnnotationBean;
}

这涉及springboot的加载流程,主入口:AbstractApplicationContext类的refresh()方法。
涉及Motan初始化的调用为refresh中的下面两个方法(处理入口类中的@Bean注解的方法,注册AnnotationBean的实例,然后调用setBeanFactory、postProcessBeanFactory、postProcessBeforeInitialization、postProcessAfterInitialization方法)

// Invoke factory processors registered as beans in the context.(调用上面的第一个方法)
invokeBeanFactoryPostProcessors(beanFactory);
// Register bean processors that intercept bean creation.(调用上面的后3个方法)
registerBeanPostProcessors(beanFactory);

AnnotationBean 实现了4个接口(这顺序也是上面调用方法的顺序)

// 不用反射,4行就可以了,还好理解
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner((BeanDefinitionRegistry) beanFactory, true);
AnnotationTypeFilter typeFilter = new AnnotationTypeFilter(MotanService.class);
scanner.addIncludeFilter(typeFilter);
scanner.scan(annotationPackages);
// 在AbstractApplicationContext.java中
public void registerShutdownHook() {
      if (this.shutdownHook == null) {
          // No shutdown hook registered yet.
          this.shutdownHook = new Thread() {
              @Override
                  public void run() {
                      doClose();
                  }
          };
          Runtime.getRuntime().addShutdownHook(this.shutdownHook);
       }
}
// doClose() 方法会销毁bean,而销毁bean时会调用所有实现了DisposableBean接口的类的destroy方法,
// 所以这样可以反注册服务。
上一篇下一篇

猜你喜欢

热点阅读