带着萌新看springboot源码12(启动原理 下)
先继续接上一篇,那个启动原理还有一点没说完。
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(启动原理 下)的更多相关文章
- 带着萌新看springboot源码8(spring ioc源码 完)
上一节说到实例化了所有的单实例Bean,后面还有一步遍历 12.完成容器刷新(finishRefresh();) 那个和生命周期有关的后置处理器类型是LifecycleProcessor:监听器原理我 ...
- 带着萌新看springboot源码05
上一节走了一遍从浏览器发出请求到得到向页面的流程,基本的功能是已经实现了.但是现在啊,我想自定义一个拦截器(拦截器可以做用户登录验证,如果登录了,就让你通过,如果没有登录,就重定向登录页面),这里就不 ...
- 带着萌新看springboot源码8(spring ioc源码上)
emmm.....这次先不说springboot原理,先好好回顾一下以前的注解版spring原理,先把spring原理了解清晰了,再看springboot原理更容易. 要说起spring,最重要的就是 ...
- 带着萌新看springboot源码03
上一节讲到了快速新建一个springboot应用,以及springboot的自动配置类起作用的时机,并且一起看了一个自动配置类的源码. 这一节我们来粗略看看当用户在浏览器输入一个url,怎么样返回一个 ...
- 带着萌新看springboot源码11(springboot启动原理 源码上)
通过前面这么多讲解,springboot原理应该也大概有个轮廓了,一些基本的配置,从客户端url到controller(配置一些要用的组件,servlet三大组件,处理器映射器,拦截器,视图解析器这些 ...
- 带着萌新看springboot源码10(springboot+JdbcTemplate+druid)
上一节把springboot和jdbcTemplate大概用法说了一下,以及大概看了一下源码,还说了加载sql文件时的原理. 这一节来看看自动注入JdbcTemplate的原理,顺便用一用Druid数 ...
- 带着萌新看springboot源码09(springboot+JdbcTemplate)
emmm.....常规开局,继续说一下废话,前面简单的说了一下spring的ioc容器创建原理(花了不少时间去看了别人的博客+查了不少资料+自己的理解),相信大家对ioc容器有了一个初步的认识了. s ...
- 带着萌新看springboot源码04
继续开头说些废话,我也不知道什么鬼,每次写着写着经常会写到其他地方去了,太容易分神了. 这次说一下springboot对于springmvc的大概整个流程,以请求动态网页为例 . 1.梳理一下spri ...
- 带着萌新看springboot源码8(spring ioc源码下)
继续接着上一节,到了第六步(温馨提醒,内容有点小多,不过看完ioc原理就差不多了) 6.注册Bean后置处理器(registerBeanPostProcessors(beanFactory)) 最后一 ...
随机推荐
- Sublime Text3 & MinGW & LLVM CLang 安装配置C-C++编译环境
Sublime Text是一款强大的跨平台代码编辑器,小巧而且丰富实用的功能是Visual Studio不能比拟的,但是编译运行是一个软肋,本文通过在sublime中配置g++编译器实现程序的编译功能 ...
- BZOJ 4665
orz gery 一发rk1真有趣(其实我没想着常数优化 inline int sqr(int x){return 1ll*x*x%mo;} const int N=2011; int n,a[N], ...
- PS2键盘扫描码:通码与断码
键盘扫描码(实用于标准PC的101.102和104 键的键盘),按下发送通码,弹起发送断码. 说明: 第一类按键,通码为1字节,断码为 0xF0+通码 形式.如A键,其通码为 0x1C,断码为 0xF ...
- 爬虫下载City Scape数据
爬虫下载City Scape数据 CityScape是道路场景的经典数据集,但是如right Img8bit_sequence_trainvaltest达到322G,需要用服务器下载比较方便. 需求场 ...
- TypeError: a bytes-like object is required, not 'str'
python bytes和str两种类型转换的函数encode(),decode() str通过encode()方法可以编码为指定的bytes 反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数 ...
- python从入门到实践-10章文件和异常(括号问题)
#!/user/bin/env python# -*- coding:utf-8 -*- # 1.从文件中读取数据with open('pi_digits.txt') as file_object: ...
- 手机touch事件及参数【转】(自己懒得写了,找了一篇摘过来)
[html5构建触屏网站]之touch事件 前言 一个触屏网站到底和传统的pc端网站有什么区别呢,交互方式的改变首当其冲.例如我们常用的click事件,在触屏设备下是如此无力. 手机上的大部分交互都是 ...
- react 引用 layer (防忘记)
1.先到 百度静态资源公共库 (http://cdn.code.baidu.com/)找到jquery和layer地址 2.找到./public/index.html 引入jquery和layer 3 ...
- 亿级SQL Server运维的最佳实践PPT分享
这次分享是我在微软的一次分享,关于SQL Server运维最佳实践的部分,由于受众来自不同背景,因此我让分享在一个更加抽象的角度进行,PPT分享如下: 点击这里进行下载
- 1.2 Why need pluggable?
When Android programmers write new features, bugs, or even crashes will exits in their App. Once a t ...