您当前的位置: 首页 >  spring

31SpringBoot启动配置原理

杨林伟 发布时间:2019-05-18 14:10:13 ,浏览量:3

创建SpringApplication对象

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

运行run方法
public ConfigurableApplicationContext run(String... args) {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        ConfigurableApplicationContext context = null;
        FailureAnalyzers analyzers = null;
        configureHeadlessProperty();
        //获取SpringApplicationRunListeners;从类路径下META‐INF/spring.factories
        SpringApplicationRunListeners listeners = getRunListeners(args);
        //回调所有的获取SpringApplicationRunListener.starting()方法
        listeners.starting();
        try {
            //封装命令行参数
            ApplicationArguments applicationArguments = new DefaultApplicationArguments(
                    args);
            //准备环境
            ConfigurableEnvironment environment = prepareEnvironment(listeners,
                    applicationArguments);
            //创建环境完成后回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成
            Banner printedBanner = printBanner(environment);
            //创建ApplicationContext;决定创建web的ioc还是普通的ioc
            context = createApplicationContext();
            analyzers = new FailureAnalyzers(context);
            //准备上下文环境;将environment保存到ioc中;而且applyInitializers();
            //applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法
            //回调所有的SpringApplicationRunListener的contextPrepared();
            //
            prepareContext(context, environment, listeners, applicationArguments,
                    printedBanner);
            //prepareContext运行完成以后回调所有的SpringApplicationRunListener的contextLoaded();
            //s刷新容器;ioc容器初始化(如果是web应用还会创建嵌入式的Tomcat);Spring注解版
            //扫描,创建,加载所有组件的地方;(配置类,组件,自动配置)
            refreshContext(context);
            //从ioc容器中获取所有的ApplicationRunner和CommandLineRunner进行回调
            //ApplicationRunner先回调,CommandLineRunner再回调
            afterRefresh(context, applicationArguments);
            //所有的SpringApplicationRunListener回调finished方法
            listeners.finished(context, null);
            stopWatch.stop();
            if (this.logStartupInfo) {
                new StartupInfoLogger(this.mainApplicationClass)
                        .logStarted(getApplicationLog(), stopWatch);
            }
            //整个SpringBoot应用启动完成以后返回启动的ioc容器;
            return context;
        } catch (Throwable ex) {
            handleRunFailure(context, listeners, analyzers, ex);
            throw new IllegalStateException(ex);
        }
    }

事件监听机制

配置在META-INF/spring.factories

ApplicationContextInitializer 在这里插入图片描述 SpringApplicationRunListener 在这里插入图片描述 配置(META-INF/spring.factories) 在这里插入图片描述 只需要放在ioc容器中

ApplicationRunner 在这里插入图片描述 CommandLineRunner 在这里插入图片描述

关注
打赏
1688896170
查看更多评论

杨林伟

暂无认证

  • 3浏览

    0关注

    3183博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1286s