zoukankan      html  css  js  c++  java
  • springboot启动原理


     

     1 public ConfigurableApplicationContext run(String... args) {
     2     StopWatch stopWatch = new StopWatch();
     3     stopWatch.start();
     4     ConfigurableApplicationContext context = null;
     5     FailureAnalyzers analyzers = null;
     6     configureHeadlessProperty();
        //获取SpringApplicationRunListeners 从META-INF/spring.factories 下获取
        //SpringApplicationRunListener.class 这种类型的,并且初始化
    7 SpringApplicationRunListeners listeners = getRunListeners(args); //就一个EventPunlishRunListener 8 listeners.starting(); //回调所有starting方法 9 try { 10 ApplicationArguments applicationArguments = new DefaultApplicationArguments(args); //没有参数 12 ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments); 14 Banner printedBanner = printBanner(environment);
            //根据环境创建ioc容器
    15 context = createApplicationContext(); 16 analyzers = new FailureAnalyzers(context); //异常分析报告,下面的try{}catch{}
           //准备上下文环境,将环境保存到ioc容器中,applyInitializers(context);
    17 prepareContext(context, environment, listeners, applicationArguments, printedBanner); 19 refreshContext(context); //刷新容器,spring执行流程 相当于所有配置进入 web应用创建tomcat 20 afterRefresh(context, applicationArguments); 21 listeners.finished(context, null); 22 stopWatch.stop(); 23 if (this.logStartupInfo) { 24 new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), stopWatch); 26 } 27 return context; 28 } 29 catch (Throwable ex) { 30 handleRunFailure(context, listeners, analyzers, ex); 31 throw new IllegalStateException(ex); 32 } 33 }

    protected void applyInitializers(ConfigurableApplicationContext context) {
      for (ApplicationContextInitializer initializer : getInitializers()) {
    	Class<?> requiredType = GenericTypeResolver.resolveTypeArgument(initializer.getClass(), 
            ApplicationContextInitializer.class); Assert.isInstanceOf(requiredType, context, "Unable to call initializer."); initializer.initialize(context); //回调之前所有initializer.initialize()   } }

     

     

     

     

  • 相关阅读:
    购物车升级版本
    python购物车-基础版本
    ubuntu制作离线包
    记录:一次数据库被恶意修改配置文件的问题
    kafka监控
    python基础day3
    python基础day1
    openstack部署之Horizon
    openstack部署之创建第一个实例
    openstack部署之neutron
  • 原文地址:https://www.cnblogs.com/But-you/p/10486902.html
Copyright © 2011-2022 走看看