先继续接上一篇,那个启动原理还有一点没说完。

6. afterRefresh(context, applicationArguments);

  看这个名字就知道,应该就是ioc容器刷新之后的一些操作了,我们来看看内部是怎么做的

  

  可以看看callRunner方法,其实就是执行这个xxxRunner里面的run方法

  

  下面我说说这两个ApplicationRunner和CommandLineRunner是个什么东西,emmm..本来我也不知道,但是查了好半天的资料、博客,知道了一点,说实话,这两个东西功能基本一样(其实就是相当于一个监听器的功用,你只需要实现这两个接口,丢到容器里,容器刷新完毕后会自动调用),只不过传递的参数类型不同,ApplicationRunner需要的是ApplicationArguments参数(其实就是主配置类main方法里面的args经过封装成的),CommandLineRunner需要的是String类型的参数(下面是我网上随便找的两张截图)

  那么要问了,那个main方法里面的args是个什么鬼啊?各位,还记不记得,我们最开始学javase的时候,也有个main方法,也有个args还记得吗?哈哈,没错,其实就是我们在外面运行(windows是cmd,linux是终端窗口)运行的时候,传递的参数,在main方法的args就是专门接受这些参数的,例如我下面又找了一幅图,嘿嘿!

  这两个东西的作用就是在应用启动的时候自动做些什么事,可能有点抽象,举个例子就是在应用启动的时候,你可以把一些常用的数据先查出来放在缓存里,等用户来查数据的时候,直接从缓存里拿就可以了,这样速度很快;

  这个功能就可以在这两个东西里面完成,而且我还查了一些其他的用途,我没试过,不知道是不是对的,原话是:“我们在开发过程中会有这样的场景:需要在容器启动的时候执行一些内容,比如:读取配置文件信息,数据库连接,删除临时文件,清除缓存信息;在Spring Boot中给我们提供了两个接口来帮助我们实现这样的需求。这两个接口就是我们今天要讲的CommandLineRunner和ApplicationRunner,他们的执行时机为容器启动完成的时候”。

  嘿嘿,引用老哥一句话,偷个懒!是不是对的,自己判断啊!

7. listeners.finished(context, null);

  这又是监听器...有没有发现springboot启动的过程会有很多的监听器,这些监听器我们也可以实现,从而控制应用启动的过程,非常方便。

    这里就不多说了,我把源码给大家看看。

  

  ok,到这里springboot大概的东西就说完了(其实还有特别多的东西我会后面一点一点慢慢的剖析,然后发出来),东西比较多,还要以前spring注解版的东西,搞懂了其实不难,还是比较舒服的。

  当然,假如你只满足于会用就行的程度,那其实很轻松的,随便找个教程或者视频,跟着做一两个小项目,就ok了,但是过不了多久,你就忘得差不多了,这叫做知其然而不知其所以然,一旦项目出点什么bug,你连出问题的地方都不知道,更不用说修复bug了。

  emmmm,本来想这一节做个简单的starter的,估计要留到下一节了,一节的内容太多了不怎么好。。。。

带着萌新看springboot源码12(启动原理 下)的更多相关文章

  1. 带着萌新看springboot源码8(spring ioc源码 完)

    上一节说到实例化了所有的单实例Bean,后面还有一步遍历 12.完成容器刷新(finishRefresh();) 那个和生命周期有关的后置处理器类型是LifecycleProcessor:监听器原理我 ...

  2. 带着萌新看springboot源码05

    上一节走了一遍从浏览器发出请求到得到向页面的流程,基本的功能是已经实现了.但是现在啊,我想自定义一个拦截器(拦截器可以做用户登录验证,如果登录了,就让你通过,如果没有登录,就重定向登录页面),这里就不 ...

  3. 带着萌新看springboot源码8(spring ioc源码上)

    emmm.....这次先不说springboot原理,先好好回顾一下以前的注解版spring原理,先把spring原理了解清晰了,再看springboot原理更容易. 要说起spring,最重要的就是 ...

  4. 带着萌新看springboot源码03

    上一节讲到了快速新建一个springboot应用,以及springboot的自动配置类起作用的时机,并且一起看了一个自动配置类的源码. 这一节我们来粗略看看当用户在浏览器输入一个url,怎么样返回一个 ...

  5. 带着萌新看springboot源码11(springboot启动原理 源码上)

    通过前面这么多讲解,springboot原理应该也大概有个轮廓了,一些基本的配置,从客户端url到controller(配置一些要用的组件,servlet三大组件,处理器映射器,拦截器,视图解析器这些 ...

  6. 带着萌新看springboot源码10(springboot+JdbcTemplate+druid)

    上一节把springboot和jdbcTemplate大概用法说了一下,以及大概看了一下源码,还说了加载sql文件时的原理. 这一节来看看自动注入JdbcTemplate的原理,顺便用一用Druid数 ...

  7. 带着萌新看springboot源码09(springboot+JdbcTemplate)

    emmm.....常规开局,继续说一下废话,前面简单的说了一下spring的ioc容器创建原理(花了不少时间去看了别人的博客+查了不少资料+自己的理解),相信大家对ioc容器有了一个初步的认识了. s ...

  8. 带着萌新看springboot源码04

    继续开头说些废话,我也不知道什么鬼,每次写着写着经常会写到其他地方去了,太容易分神了. 这次说一下springboot对于springmvc的大概整个流程,以请求动态网页为例 . 1.梳理一下spri ...

  9. 带着萌新看springboot源码8(spring ioc源码下)

    继续接着上一节,到了第六步(温馨提醒,内容有点小多,不过看完ioc原理就差不多了) 6.注册Bean后置处理器(registerBeanPostProcessors(beanFactory)) 最后一 ...

随机推荐

  1. python操作kafka(confluent_kafka 生产)

    #!/usr/bin/python # -*- coding:utf-8 -*- from confluent_kafka import Producer import json import tim ...

  2. 学习随笔:Vue.js与Django交互以及Ajax和axios

    1. Vue.js地址 Staticfile CDN(国内): https://cdn.staticfile.org/vue/2.2.2/vue.min.js unpkg:会保持和npm发布的最新的版 ...

  3. CheckedTextView文字不居中的问题

    问题:CheckedTextView设置了android:gravity="center",但是不居中 解决方法:添加属性android:textAlignment="c ...

  4. patch 请求时,关于id的报错问题

    在更新操作时,先显示要更新的数据内容,再修改 在发送patch请求时出现 After applying the update to the document {_id: ObjectId('55be3 ...

  5. 使用handler倒计时

    package com.example.jikangwang.myapplication; import android.content.Intent; import android.os.Handl ...

  6. python学习笔记(4)

    .................................................................................................... ...

  7. LeetCode 31 Next Permutation / 60 Permutation Sequence [Permutation]

    LeetCode 31 Next Permutation / 60 Permutation Sequence [Permutation] <c++> LeetCode 31 Next Pe ...

  8. zuoye

    a=input('请输入一个数字:') b=input('请再输入一个数字') sum2=int(a)+int(b) print('两个数字的和是:{}'.format(sum2)) a=input( ...

  9. Could not resolve placeholder 'IMAGE_SERVER_URL' in string value "${IMAGE_SERVER_URL}"

    这种问题 在网上查的是说使用了重复的property-placeholder   可能是在别的xml 也用了property-placeholder 解决方法 加上  ignore-unresolva ...

  10. Katalon Studio之swagger中的API导入

    约束条件: swagger中一定要在注解@ApiOperation中设置nickname的唯一值,例如: @ApiOperation(value="新增用户",notes=&quo ...