带着萌新看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)) 最后一 ...
随机推荐
- 防御xss 大致理解
前端 发送留言内容 包含 js 代码 后台 管理员 查看 留言 代码被执行 拿到cookie 成功登陆 解决办法 对录入 进行相关的过滤处理 其他解决方法 正在学习中
- Analisis of Hello2 source
GreetingServlet.java @WebServlet("/greeting") //为servelt指定URL pattern为:/greeting public cl ...
- java创建文件写入内容,并实现下载该文件
public void getText(){ response.setHeader("Content-Disposition", "attachment;filename ...
- 如何使用 tf object detection
# 如何使用 tf object detection https://juejin.i m/entry/5a7976166fb9a06335319080 https://towardsdatascie ...
- 3.SSM整合_多表_一对多的增删改查
1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件,一对多反过来就是多对一 一 接口 public interface CategoryMapper { public void ad ...
- 关于条件语句和 a && b
learn from javascript cookbook if (element == 'ab') array[index] = "**"; 该语句 等价于 if (eleme ...
- requirejs + sass 实现的前端及 grunt 自动化构建
对于 现在的 vue . react .webpack 来说也许有点旧了,有时候,越简单的技术越可靠,备份一下 module.exports = function(grunt) { // Projec ...
- Edge-assisted Traffic Engineering and applications in the IoT
物联网中边缘辅助的流量工程和应用 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时间仓促,且笔 ...
- c# 右下角弹出窗口
public partial class Form2 : Form { System.Diagnostics.Stopwatch sth = new System.Diagnostics.Stopwa ...
- Spring Cloud 微服务架构全链路实践
阅读目录: 1. 网关请求流程 2. Eureka 服务治理 3. Config 配置中心 4. Hystrix 监控 5. 服务调用链路 6. ELK 日志链路 7. 统一格式返回 Java 微服务 ...