带着萌新看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)) 最后一 ...
随机推荐
- 用Sklearn画一颗决策树
小伙伴们大家好~o( ̄▽ ̄)ブ,首先声明一下,我的开发环境是Jupyter lab,所用的库和版本大家参考: Python 3.7.1(你的版本至少要3.4以上 Scikit-learn 0.20.0 ...
- PBRT笔记(10)——体积散射
体散射处理过程 3个影响参与介质在环境中的辐射度分布的主要因素: 吸收:减少光能,并将其转化为别的能量,例如热量. 发光:由光子发射光能至环境中. 散射:由于粒子碰撞,使得一个方向的辐射度散射至其他方 ...
- [linux]CentOS安装pre-built Nginx
官方文档:https://nginx.org/en/linux_packages.html Nginx安装分为软件包安装和pre-built安装.这里使用的pre-built安装,不用自己编译. 设置 ...
- nginx配置前端代理
#user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...
- LINUX监控-spotlight
这里连接的user不能是root(spotlight需要一个具有root权限的用户,但是又不允许是root),所以需要给要连接的linux端创建一个有root权限的用户,在linux主机创建了root ...
- 关于vue的数据增删的一些细节
第一种情况:在vue中使用的数据必须先在data中定义数据,不然报错: 第二种情况:访问对象中不存在的值,是可以得到undefined,但是不会报错 第三种:vue只会监听data已经定义的值,后续添 ...
- 记一次<iframe>的使用
将jsp拆分frame框架,因为采用了第一种方式,一直在考虑用jquery异步请求获取数据,总是但不到效果, 终于在js写吐的时候选择了第二种方式. //参考网上的使用,大多是下面这个样子,如果涉及静 ...
- 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客
前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...
- turtle库的学习
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动, ...
- 使用Apache服务部署静态网站
1970年,作为互联网前身的ARPANET(阿帕网)已初具雏形,并开始向非军用部门开放,许多大学和商业部门开始接入.虽然彼时阿帕网的规模(只有4台主机联网运行)还不如现在的局域网成熟,但是它依然为网络 ...